Установка пользовательского свойства в MSI-файле - PullRequest
0 голосов
/ 08 июня 2010

Как настроить пользовательское свойство в MSI-файле на лету? Я не хочу передавать пользовательское свойство с помощью msiexec. Я хочу сохранить значение свойства в самом MSI-файле на основе входа пользователя.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 08 июня 2010

См. Свойство ИМЯ ПОЛЬЗОВАТЕЛЯ . Единственные варианты установки свойства: во время разработки; в командной строке (напрямую или в преобразовании); и в пользовательском действии. Однако нужная вам информация может находиться в одном из свойств, установленных системой.

0 голосов
/ 08 апреля 2013

Вы можете использовать следующий фрагмент кода (после того, как вы загрузите класс WindosInstaller, написанный Иэном Шоном Махром Мариано

здесь

http://www.codeproject.com/KB/cs/msiinterop/msiinterop.zip

    public static bool ChangeProperty(string MsiPath, string property, string value)
    {
        bool result = true;
        IntPtr view = IntPtr.Zero;
        IntPtr dataBase = IntPtr.Zero;
        MsiError err;

        try
        {
            err = MsiInterop.MsiOpenDatabase(MsiPath, MsiDbPersistMode.Transact, out dataBase);
            if (err == MsiError.Success)
            {
                string sql = "INSERT INTO Property (Property, Value) VALUES ('" + property + "', '" + value + "')";
                err = MsiInterop.MsiDatabaseOpenView(dataBase, sql, out view);

                err = MsiInterop.MsiViewExecute(view, IntPtr.Zero);
                if (err == MsiError.FunctionFailed)
                {
                    string sqlUpdate = @"UPDATE Property SET Value = '" + value + "' WHERE Property = '" + property + "'";
                    err = MsiInterop.MsiDatabaseOpenView(dataBase, sqlUpdate, out view);
                    err = MsiInterop.MsiViewExecute(view, IntPtr.Zero);
                }
            }
            err = MsiInterop.MsiDatabaseCommit(dataBase);
        }
        catch
        {
            result = false;
        }
        finally
        {
            err = MsiInterop.MsiViewClose(view);
            err = MsiInterop.MsiCloseHandle(dataBase);
        }
        return result;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...