我的安裝程序有一個自定義操作,它可以聯繫Windows服務並設置一些參數。 爲了成功使用該服務,它必須以提升的權限運行。Wix安裝程序 - 如何從卸載或更改控制面板中的程序運行時使用管理權限運行更改
第一次安裝時,當用戶單擊安裝按鈕時,它將顯示UAC提示併成功安裝完成。但是,當用戶決定更改產品(添加新功能)時,調用服務將失敗!發生這種情況是因爲安裝程序未在特權模式下運行。當我從具有管理權限的命令提示符啓動安裝程序時,更改操作也會成功完成。
我遇到了以下article這表明創建引導程序。有沒有更簡單的方法來實現這一點?
我是否正確實施了自定義操作?這裏的自定義操作代碼
<CustomAction Id='SetParams' BinaryKey='Setup.CustomAction' DllEntry='SetParameters' Execute='deferred' Impersonate='no' Return='asyncWait'/>
<Binary Id='Setup.CustomAction' SourceFile='$(var.CustomActionDll)' />
<InstallExecuteSequence>
<Custom Action='SetParams' Before='InstallFinalize'><![CDATA[REMOVE <> "ALL"]]></Custom>
</InstallExecuteSequence>
更新:科斯明的評論之後,我意識到我是在訪問CA的會話數據SetParams CA使用在UI序列中生成的動態屬性。爲了訪問延期CA中的數據,我創建了一個即時CA,它動態提取這些數據並將其放入CustomActionData中。
<CustomAction Id='SaveParams' BinaryKey='Setup.CustomAction' DllEntry='SaveParameters' Execute='immediate' Return='check'/>
<CustomAction Id='SetParams' BinaryKey='Setup.CustomAction' DllEntry='SetParameters' Execute='deferred' Impersonate='no' Return='check' />
<Custom Action='SaveParams' Before='SetParams'><![CDATA[REMOVE <> "ALL"]]></Custom>
<Custom Action='SetParams' Before='InstallFinalize'><![CDATA[REMOVE <> "ALL"]]></Custom>
以下是SaveParameters方法中的自定義操作
propertyName = moduleInfo.GetPropertyName(moduleParameter.Name);
customActionData.Append(string.Format(CultureInfo.InvariantCulture, "{0}={1};", propertyName, session[propertyName]));
這種方法適用的一部分! 當從管理員cmd會話啓動時[propertyName]返回正確的值,但是當我從非提升cmd提示符運行安裝程序更改時,我無法訪問直接CA中的屬性值 - session [propertyName]返回空字符串?
我可以訪問WXS文件中定義的(靜態)屬性
<Property Id="INSTALL" Secure="yes" />
,但不是一個人的,我在UI序列這樣
session[property] = parameters[paramcount++];
延期且沒有模擬屬性確保您的自定義操作以完全權限運行。其他問題導致此問題。請嘗試調試自定義操作代碼。 – 2012-02-01 15:52:26
@CosminPirvu我試着從用戶命令提示符和管理cmd運行安裝程序(更改操作)。如果管理員cmd自定義操作完美地工作,而在常規cmd的情況下,它的行爲與從控制面板啓動更改時的行爲相同。顯然,對自定義操作的調用失敗,因爲它不是以管理員身份運行。 – MrBob 2012-02-01 16:03:35
@CosminPirvu你是對的。我正在訪問CA中的會話數據。 SetParams CA使用在UI序列中生成的動態屬性。爲了訪問延期CA中的數據,我創建了一個即時CA,它動態提取這些數據並將其放入CustomActionData中。這種方法有效!但是,當我從非提升cmd提示運行安裝程序更改時,我無法訪問直接CA中的屬性值?爲什麼? – MrBob 2012-02-08 12:22:25