1

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 経由で機能するべきではありませんか? 私が何を間違っているのか、何が欠けているのか、誰にも分かりますか?

4

1 に答える 1

0

問題を発見しました。私の msi は 64 ビット バイナリとしてビルドされていましたが、実行されている icacls コマンドは 32 ビット バージョンでした。inetsrv\config の下のファイルは、64 ビット プログラムでのみ変更できます。とにかく、wix ファイルに次の 2 つの変更を加える必要がありました。1
) icacls の 64 ビット バージョンのフル パスを使用します。c:\windows\system32\icacls
2) DllEntry="CAQuietExec" をDllEntry="CAQuietExec64"に変更します。

上記の 2 つの変更により、問題が解決されました。これで機能するようになりましたが、ACL を変更するカスタム アクションを使用することにしました。

于 2012-05-04T23:01:14.153 に答える