Windows 2008 R2 x64 で Wix 3.5 を使用して
います。権限の問題を回避するために、これを管理者として実行しています。icacls コマンドを実行して c:\windows\system32\inetsrv\config\administration.config ファイルの ACL にユーザーを追加するインストーラーを作成しました。ウィックスコードはこちら
<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]: op を実行しています: CustomActionSchedule(Action=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) を作成していますスレッド 1928
MSI (s) (44:38) [07:51:46:872]: リモート カスタム アクションを呼び出しています。DLL:
C:\Windows\Installer\MSIFBCF.tmp、エントリポイント: CAQuietExec
MSI (s) (44!68) [07:51:46:888]: スレッド 2920
CAQuietExec のタイプ 790531 の MSIHANDLE (796) を作成しています: 正常に処理されました0 ファイル; 0 個のファイルの処理に失敗しました
ご覧のとおり、コマンドが無視されたかのように、ファイルはほとんど変更されていません。ユーザーは ACL に追加されません。dosプロンプトからコマンドを実行すると、次のようになるため、コマンドが機能することはわかっています。
C:\Users\Administrator\Desktop>cmd /c icacls "c:\windows\system32\inetsrv\config\administration.config" /Grant johndoe:M /T
処理済みファイル: c:\windows\system32\inetsrv\config\ Administration.config
1 個のファイルが正常に処理されました。0 個のファイルの処理に失敗しました
コマンドが WIX から実行されている場合、inetsrv\config の下のファイルの ACL を変更できないようですが、その理由は不明です。コマンドがコマンドライン経由で機能する場合、Wix CAQuietExec 経由で機能するべきではありませんか? 私が何を間違っているのか、何が欠けているのか、誰にも分かりますか?