2013-05-13 6 views
1

У меня есть установщик MSI, который устанавливает мою службу Windows, и в моих пользовательских действиях мне нужно записать некоторые значения в реестр в файле HKEY_LOCAL_MACHINE/SOFTWARE/MYSoftware.Невозможно записать реестр в пользовательских действиях установщика MSI

Я пытаюсь сделать это, и он не работает, но из моей службы Windows он работает нормально. Может ли кто-нибудь сказать мне, где я ошибаюсь?

string registryLocaltion = AgentProperties.TMAGENT_REGISTRY_LOCATION 
          + @"\" +AgentProperties.TMAgentVersion; 

tmKeyMain = Registry.LocalMachine.OpenSubKey(registryLocaltion, true); 
if (tmKeyMain == null) 
{ 
    log.Error("Unable to open registry key " + registryLocaltion); 
} 

tmKeyMain.SetValue("UseProxySettings", settings.UseProxySettings); 
if (settings.UseProxySettings) 
{ 
    tmKeyMain.SetValue("ProxyHost", settings.ProxyHost); 
    tmKeyMain.SetValue("ProxyPort", settings.ProxyPort); 
    tmKeyMain.SetValue("ProxyUsername", 
       GenericHelper.ConvertToBase64Encoding(settings.ProxyUsername)); 
    tmKeyMain.SetValue("ProxyPassword", 
       GenericHelper.ConvertToBase64Encoding(settings.ProxyPassword)); 
    tmKeyMain.SetValue("ProxyExclusion", settings.ProxyExclusion); 
    tmKeyMain.SetValue("BypassProxy", settings.BypassProxy); 
} 

Этот код работает отлично в моей службы Windows, но если бы я сделать некоторые вещи, очень похожий на мой пользовательских действий в программе установки MSI она не работает.

Может кто-нибудь сказать мне, где я иду не так?

+0

Правильно ли я предполагаю, что вы используете пользовательские действия InstallUtil (Installer Class) и создаете MSI с помощью проектов развертывания Visual Studio? –

+0

Да, вы правы ... Я делаю что-то неправильно .. ?? –

ответ

2

Вы столкнулись с проблемой пары. Наиболее очевидная проблема заключается в том, что проекты Visual Studio Deployment неправильно планируют настраиваемые действия для олицетворения клиентского контекста. Это означает, что в сценарии UAC у вас не будет разрешений. Быстрая работа - это запустить MSI из уже повышенного контекста командной строки.

Вторая проблема заключается в том, что проекты развертывания Visual Studio абстрактно скрывают основную MSI. Для пользовательских действий он предоставляет только параметры «установить, удалить, откат, совершить», не подвергая никаким дополнительным настройкам. Он скрывает таблицы ServiceInstall и ServiceControl. Это заставляет вас написать настраиваемое действие, которое повторно изобретает колесо.

См. Все ваши действия, которые необходимо выполнить, это выполнять бизнес-логику и параметры настройки. Затем вы должны использовать таблицу реестра для установки данных на основе свойств. Таким образом, вы максимально используете как можно больше Установщика Windows, а также все возможности бесплатного транзакционного/отката.

Эта проблема повторяется снова и снова, и именно поэтому Microsoft убила типы проектов установки в VS2012.

Если бы это была моя установка, я бы реорганизовал проект, чтобы использовать AppSearch/Reglocator для чтения в данных, иметь минималистское настраиваемое действие для обработки, а затем использовать таблицу реестра для применения данных.

Это потребует от вас, как минимум, взглянуть на Windows Installer XML, чтобы создать модуль слияния, который имеет всю эту логику и объединяется в существующий проект установки. Однако это требует времени.

Смежные вопросы