1
這是我寫MSI安裝程序的第一步。在這裏和其他地方有許多關於WIX安裝程序中關於UAC的自定義命令的帖子。但是,沒有發現任何解決我的問題。WIX自定義動作啓動高架應用程序
我需要啓動一個在我的MSI中提升的應用程序。我試圖啓動一個.NET應用程序(編譯爲以Admin身份運行),它將安裝設備驅動程序。如果需要,我使用.NET EXE向用戶顯示「連接設備」提示,然後在非託管代碼中執行實際的驅動程序安裝。
MSI立即引起UAC提示,但應用程序隨後啓動時沒有提升,並失敗。從提升的命令提示符運行不起作用。我在某處讀到,將該清單添加到安裝中可能會有所幫助,但不會。
這裏是我的維克斯代碼:
<?xml version="1.0"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" UpgradeCode="12345678-1234-1234-1234-111111111111"
Name="FlashBoot Driver" Version="0.0.1" Manufacturer="ACME Corp" Language="1033">
<Package InstallerVersion="200" Compressed="yes" Comments="Windows Installer Package"/>
<Media Id="1" Cabinet="product.cab" EmbedCab="yes"/>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLDIR" Name="FlashBoot Driver">
<Component Id="AppFiles" Guid="12345678-1234-1234-1234-222222222222">
<File Id="AppFile1" Source="C:\App\Release\Setup.exe"/>
<File Id="AppFile2" Source="C:\App\Release\Setup.exe.manifest"/>
<File Id="AppFile3" Source="C:\App\Release\Unmanaged.dll"/>
</Component>
</Directory>
</Directory>
</Directory>
<Feature Id="DefaultFeature" Level="1">
<ComponentRef Id="AppFiles"/>
</Feature>
<CustomAction Id="OurAction"
Execute="deferred"
Impersonate="no"
Return="ignore"
FileKey="AppFile1"
ExeCommand="" />
<InstallExecuteSequence>
<Custom Action="OurAction" Before="InstallFinalize" />
</InstallExecuteSequence>
</Product>
</Wix>
您需要將自定義操作配置爲在沒有模擬的情況下運行延期,這將使其在LocalSystem帳戶下以管理員權限運行。此外,自定義操作必須在InstallFiles標準操作之後進行排序,以確保在嘗試安裝/使用它們時確保所有資源都在計算機上。此方法適用於來自任何MSI軟件包的自定義操作,而不管用於構建它的工具。 –
@Bogdon Mitrache,謝謝你的回覆。我以爲我在做你的建議。正如你所看到的,延期執行和關閉模擬。至於InstallFiles之後的順序,不要在「InstallFinalize」之前完成同樣的事情嗎? –
嗯,對不起,我一定錯過了你的代碼片段,確實你的自定義操作是正確配置和計劃的。安裝日誌說什麼?另外,如果您使用Process Explorer處理您的自定義操作EXE,在哪個帳戶下啓動?也許你的EXE需要在當前的管理員用戶下運行,所以即使它以管理員權限在系統帳戶下運行,它也會失敗。 –