5

Windowsインストーラープロジェクト(標準のOOTB VS 2008インストーラープロジェクト-vdproj)のアンインストールプロセスの一部としてバッチファイルを実行する必要があります。インストーラープロジェクトのカスタムアクションから直接batファイルを実行することはできないため、必要なbatファイルを呼び出すための簡単なvbsスクリプトを作成しました。
vbsコード:

Set WshShell = WScript.CreateObject( "WScript.Shell" )
command = "uninstall-windows-serivce.bat"
msgbox command
WshShell.Run ("cmd /C " & """" & command & """")
Set WshShell = Nothing

このスクリプトをアンインストールとは別に実行すると、完全に機能します。ただし、アンインストールの一部として実行すると、batファイルは実行されません(ただし、メッセージボックスが表示されるため、vbsファイルが呼び出されることがわかります)。エラーは報告されていません(少なくとも私が知ることができること)。このスクリプトが「カスタムアクションのアンインストール」の一部として機能しないのはなぜですか

4

6 に答える 6

6

私はこれと同じ問題に遭遇しました。問題は、vbs ファイル内で WScript を呼び出せないことです。CreateObject を呼び出すだけで済みます。

すなわち。

Set WshShell = CreateObject( "WScript.Shell" )
command = "uninstall-windows-serivce.bat"
msgbox command
WshShell.Run ("cmd /C " & """" & command & """")
Set WshShell = Nothing
于 2008-09-23T20:48:05.133 に答える
1

アプリケーションを広く配布する必要があるほど、スクリプト化されたカスタム アクションを使用しないことを強くお勧めします。過去にたくさんの記事を書いたことがありますが、あまりにも多くのコンピューターでVBScriptや JavaScript の実行に問題があることがわかりました。この状況を処理するために、最終的にそれらをすべて C++ で書き直しました。以下に、スクリプト化されたカスタム アクションを避けるべき理由を詳しく説明している投稿をいくつか示します。

于 2008-10-01T19:34:48.927 に答える
0

私にとってうまくいったのは、.batファイルのフルパスを指定することでした。

于 2010-09-20T11:23:32.893 に答える
0

インストーラー クラスで、Uninstall メソッドをオーバーライドしていますか。

 Public Overrides Sub Uninstall(ByVal savedState As System.Collections.IDictionary)
            MyBase.Uninstall(savedState)
           'Shell to batch file here
    End Sub

次に、バッチ ファイルへのフル パスを修飾しましたか?

于 2008-09-19T02:01:30.080 に答える
0

スクリプトから見た現在のディレクトリにバッチ ファイルがあることを確認しましたか? 使用しているディレクトリを示す別のメッセージを追加して、バッチ ファイルがあると思われる場所で実際にバッチ ファイルを実行しようとしていることを確認します。

于 2008-09-19T02:01:49.237 に答える
0

特に指定しない限り、Windows インストーラー スクリプトは通常、System として実行されます。インタラクティブなユーザーがバッチ ファイルを実行する必要がある可能性はありますか?

于 2008-09-23T20:45:00.740 に答える