1

バッチファイルを実行したいのですが、これは次の方法で実行します。

<CustomAction Id='InstallFilter' FileKey='install' ExeCommand='' Execute='deferred'  />

<InstallExecuteSequence>
    <Custom Action='InstallFilter' Before='InstallFinalize' />
</InstallExecuteSequence>

これによりバッチファイルが実行されますが、C:\ Windows \ System32(またはそのようなもの)で実行されます。ファイルが見つかったディレクトリで実行したいのですが、FileKey属性でDirectory属性を指定することはできません。インストーラーに特定のディレクトリを使い果たすように指示するにはどうすればよいですか。できればディレクトリIDを使用してください。

また、スクリプトを使用してアプリをアンインストールしようとすると、「Windowsインストーラパッケージに問題があります。インストールを完了するために必要なプログラムを実行できませんでした」というエラーメッセージが表示されます。スクリプトが実行されるまでにファイルが削除されているため、これは理にかなっています。質問は:

  1. アクションをアンインストールではなくインストール時にのみ実行するように指定するにはどうすればよいですか?

  2. この現在のコピーをアンインストールするにはどうすればよいですか?

4

1 に答える 1

1

インストーラーは、TrustedInstallerユーザー(管理者)として昇格モードで実行されています。デフォルトでは、cmd.exe昇格時の作業フォルダはC:\Windows\System32です。昇格された作業フォルダを強制的に変更する方法はありません(または少なくとも1つはわかりません)cmd.execmd -c some.cmd(ランダムフォルダから昇格して実行することのセキュリティへの影響を考慮してください)

スクリプトは、それが置かれているフォルダーを取得し、現在のフォルダーを次のように変更できます。

setlocal
pushd %~dp0

rem ... script logic ...

popd
endlocal

アンインストールでのみカスタムアクションを実行する方法についての彼自身の質問に対する@Cheesoの回答で、カスタムアクションをいつ実行する必要があるかを指定できるさまざまな条件を調べることができます。(その情報を不必要に複製したくない)

更新:NOT INSTALLED特定のシナリオで機能しない場合は、を試してくださいNOT REMOVE

于 2010-04-21T19:11:03.440 に答える