wix
  • windows-installer
  • windows-server-2008-r2
  • wix3.5
  • cacls
  • 2012-05-04 47 views 0 likes 
    0

    在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工作?有沒有人知道我做錯了什麼或我缺少什麼?

    回答

    0

    找到了問題。 即使我的msi被構建爲64位二進制文​​件,正在運行的icacls命令也是32位版本。 inetsrv \ config下的文件只能由64位程序修改。無論如何,我需要在我的wix文件中進行以下兩項更改
    1)使用64位版本icacls的完整路徑即。 C:\ Windows \ System32下\ ICACLS
    2)改變DllEntry = 「CAQuietExec」 到DllEntry = 「CAQuietExec64」

    上述兩個變化解決了問題。即使這現在起作用了,我仍然決定使用一個ACL更改的自定義操作。

    相關問題