在Windows 2008 R2 x64上使用Wix 3.5
我以管理員身份運行此操作以避免任何權限問題。我創建了一個安裝程序,它執行icacls命令將用戶添加到c:\ windows \ system32 \ inetsrv \ config \ administration.config文件的ACL中。下面是威克斯代碼從Wix CAQuietExec運行icacls的行爲與從dos命令行運行時的行爲不同
<Property Id="QtExecExample" Value='"cmd" /c icacls "c:\windows\system32\inetsrv\config\administration.config" /Grant johndoe:M /T'/>
<CustomAction Id="QtExecExample" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" Impersonate="no"/>
<InstallExecuteSequence>
<Custom Action="QtExecExample" Before='InstallFinalize' > NOT Installed</Custom>
</InstallExecuteSequence>
下面是在MSI輸出日誌
MSI(S)(44:88)[07:51:46:872]:執行運算:CustomActionSchedule(動作= QtExecExample,ActionType = 3073,Source = BinaryData,Target = CAQuietExec,CustomActionData =「cmd」/ c icacls「c:\ windows \ system32 \ inetsrv \ config \ administration.config」/ Grant johndoe:M/T) MSI s)(44:88)[07:51:46:872]:爲線程創建790536類型的MSIHANDLE(795) MSI(s)(44:38)[07:51:46:872]:調用遠程自定義操作。 DLL:
C:\ Windows \ Installer \ MSIFBCF.tmp,入口點:CAQuietExec
MSI(s)(44!68)[07:51:46:888]:爲線程2920創建類型790531的MSIHANDLE(796)
CAQuietExec:成功處理0個文件;處理0文件失敗
正如您所看到的,文件未被修改,就好像命令被忽略了一樣。該用戶未被添加到ACL中。我知道該命令的工作原理,因爲如果我從dos提示符運行該命令,我會得到以下內容。
C:\用戶\管理員\桌面> CMD/C ICACLS 「C:\ Windows \ System32下\ INETSRV \設置\ administration.config」/格蘭特輸入johndoe:M/T
處理的文件:C:\ WINDOWS \ system32 \ inetsrv \ config \ administration.config
成功處理1個文件;處理失敗0文件
如果從WIX運行命令但不知道爲什麼,似乎inetsrv \ config下的文件的ACL不能更改。如果命令通過命令行工作,那麼它不應該通過Wix CAQuietExec工作?有沒有人知道我做錯了什麼或我缺少什麼?