Wixインストーラーは初めてです。アプリケーション用にwixインストーラーを使用してセットアップを開発しました。cmd.exeでコマンドを実行するには、カスタムアクションを実行する必要があります。 In XPそれは正常に動作します。ただし、Windows 8および7では、cmdプロンプトを管理者として実行する必要があります。
グーグルで検索したところ、キーワード昇格された権限と偽装が役に立つかもしれません。
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" InstallPrivileges="elevated"></Package>
上記でわかるように、perMachineに設定されたInstallScope属性を使用し、CustomAction要素でImpersonate = "No"を使用しました。
<CustomAction Id='comReg' Directory='INSTALLLOCATION' Impersonate='no'
ExeCommand='"[NETFRAMEWORK40CLIENTINSTALLROOTDIR]regasm.exe" "[INSTALLLOCATION]myProduct.dll" /codebase' Return='check' />
しかし、インストール中に変更はありませんでした。上記のコマンドを管理者モードで開いて実行するには、コマンドプロンプトが必要です。
誰でもこれらのキーワードについて教えてください "昇格した特権と偽装"
<InstallExecuteSequence>
<Custom Action='comReg' After='InstallFinalize'>NOT REMOVE</Custom>
<Custom Action='comUnreg' Before='RemoveFiles'>REMOVE</Custom>
</InstallExecuteSequence>
どうやってするの?
wixのドキュメント は、Impersonate属性を説明しています:
この属性は、LocalSystemとして実行されるWindowsインストーラーが、このカスタムアクションを実行するときに、インストールするユーザーのユーザーコンテキストを偽装するかどうかを指定します。通常、値は「yes」にする必要がありますが、マシンに変更を適用するためにカスタムアクションに昇格した特権が必要な場合を除きます。
また、遅延カスタムアクションと即時カスタムアクションの違いを理解する必要があります。同じヘルプページの実行属性を参照してください。
この属性は、カスタムアクションのスケジュールを示します。この属性の値は、次のいずれかでなければなりません。
deferredカスタムアクションがスクリプト内で実行されることを示します(おそらく昇格された特権で)。 immediateカスタムアクションがユーザー特権で通常の処理時間中に実行されることを示します。これがデフォルトです。
現在、カスタムアクションは即座に実行されます。つまり、ユーザー権限で実行されています。詳細については このブログ投稿 を参照してください。ただし、特に:
即時カスタムアクションは、呼び出し元のユーザーになりすます。 Windows Vistaより前は、この時点ではインストール管理者が特権トークンを持っていたため、これは問題ではありませんでした。 Windows VistaにUACが導入されたため、UACが有効になっているデフォルトの管理トークンはフィルター処理されたトークンであり、すべての特権を保持していません。 即時カスタムアクションはマシンの状態を変更することを想定していないため-状態データを収集し、カスタムアクションを遅延実行するようにスケジュールするためだけです-これはまだすべきではありません問題。結局のところ、この時点で、インストールおよびロールバックスクリプトの生成だけが行われているはずです。
即時のカスタムアクションでマシンの状態を変更しないでください。延期されたものを使用し、偽装をnoに保つと、動作するはずです。
<CustomAction Id='comReg' Directory='INSTALLLOCATION' Execute='deferred' Impersonate='no' ExeCommand='"[NETFRAMEWORK40CLIENTINSTALLROOTDIR]regasm.exe" "[INSTALLLOCATION]EAWordImporter.dll" /codebase' Return='check' />
[〜#〜] edit [〜#〜]:InstallExecuteSequence要素を使用してカスタムアクションをスケジュールします。
<InstallExecuteSequence>
<Custom Action='comReg' Before='InstallFinalize'/>
</InstallExecuteSequence>