簡體   English   中英

向WiX安裝程序添加自定義操作

[英]Adding Custom Action to WiX Installer



我試圖使用WiX Installer在cmd中運行自定義命令。
我利用Product.wxs中的include文件,在整個安裝過程中正確使用了該文件。

我有3個自定義操作,其中2個工作正常 似乎不起作用的一個是:

<CustomAction Id='AddDefaultDomain'
        Directory='TARGETDIR'
        Impersonate="no"
        Execute="immediate"
        ExeCommand="C:\windows\system32\inetsrv\appcmd.exe set config /section:basicAuthentication /defaultLogonDomain:[%USERDOMAIN]  /commit:apphost"
        Return="asyncNoWait" />

安裝程序可以正確運行,當我通過cmd窗口調用AppCmd並在cmd中復制->粘貼“ ExeCommand”並執行它時,它就可以正常工作。

可能這很簡單,但是現在我不明白為什么它不起作用。
感謝所有幫助。

完全包含文件

<?xml version="1.0" encoding="utf-8"?>
<Include>
  <!-- Create Scheduled Task -->
  <InstallExecuteSequence>
    <Custom Action="CreateScheduledTaskGoogleService" After="InstallFiles">NOT Installed</Custom>
    <Custom Action="CreateScheduledTaskGoogleServiceId" After="CostFinalize">NOT Installed</Custom>
    <!-- Add Defualt DOmain -->
    <Custom Action="AddDefaultDomain" After="CostFinalize">NOT Installed</Custom>

  </InstallExecuteSequence>
  <CustomAction Id="CreateScheduledTaskGoogleService" Return="check" Impersonate="no" Execute="deferred" BinaryKey="WixCA" DllEntry="CAQuietExec" />
  <CustomAction Id="CreateScheduledTaskGoogleServiceId" Property="CreateScheduledTaskGoogleService" Execute="immediate" Value="&quot;[SystemFolder]SCHTASKS.EXE&quot; /CREATE /TN &quot;ActaNet Control - Google Sync&quot; /XML &quot;[INSTALLFOLDERPROGRAMFILESGOOGLE]ScheduledTask.xml&quot;" />

  <!-- DOES NOT SEEM TO BE WORKING! -->
  <CustomAction Id='AddDefaultDomain'
        Directory='TARGETDIR'
        Impersonate="no"
        Execute="immediate"
        ExeCommand="C:\windows\system32\inetsrv\appcmd.exe set config /section:basicAuthentication /defaultLogonDomain:[%USERDOMAIN]  /commit:apphost"
        Return="asyncNoWait" />

  <!-- Delete Scheduled Task -->
  <InstallExecuteSequence>
    <Custom Action="TaskDeleteGoogleService" Before="CreateScheduledTaskGoogleService">REMOVE="ALL"</Custom>
  </InstallExecuteSequence>
  <CustomAction Id="TaskDeleteGoogleService" Return="ignore" Execute="deferred" Directory="TARGETDIR" Impersonate="no" ExeCommand="SCHTASKS.EXE /DELETE /TN &quot;ActaNet Control - Google Sync&quot; /F" />
</Include>

我要做的第一件事就是確認命令實際上正在執行。 使用諸如過程監視器之類的工具進行確認。

完成此操作后,我將查看該命令是否正在目標系統上進行某些修改,而這將需要提升的特權才能這樣做。 如果是這樣,我會將Execute屬性的值更改為“ deferred”,然后查看它是否有效。 似乎您正在嘗試使用即時模式自定義操作來更改目標系統上的某些內容。 將操作標記為“延遲”還需要將操作放置在“ InstallInitialize”和“ InstallFinalize”之間。

在您當前的情況下,您正在嘗試以即時模式啟動exe。 即時模式模擬了登錄用戶,因此,在UAC環境中,修改目標系統的任何自定義操作都可能失敗。

希望這可以幫助。

首先,將自定義操作的“執行”更改為“延遲”,因為您在“立即”類型中沒有系統權限。

其次,使用loggging查看安裝過程中發生的情況。 使用以下conconle命令將在安裝YourInstaller.msi的同一文件夾中創建安裝過程的日志文件:

msiexec -i YourInstaller.msi -l*v log.txt

您可以通過自定義操作名稱在結果log.txt文件中找到安裝程序嘗試執行該文件時發生的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM