セットアップ プロジェクトでは、「.exe、.dll、.js、.vbs」などの実行可能ファイルは受け入れられ.bat
ますが、カスタム アクションでファイルを実行する方法はありません。
問題は、*.bat
インストール中にファイルを実行する方法です。
セットアップ プロジェクトでは、「.exe、.dll、.js、.vbs」などの実行可能ファイルは受け入れられ.bat
ますが、カスタム アクションでファイルを実行する方法はありません。
問題は、*.bat
インストール中にファイルを実行する方法です。
さて、多くの検索と試行錯誤の末、私はこれを解決しました。これが最善の方法かどうかはわかりませんが、機能します。
シナリオは次のとおりです。VisualStudioセットアッププロジェクトを介して展開したいアプリケーションがあります。アプリケーションファイルに加えて、バッチ(.bat)ファイルを含むサブディレクトリをターゲットディレクトリに作成したいと思います。このファイルをインストールプロセスの最後に実行したいと思います。
これがあなたがすることです:
/c "[TARGETDIR]subdirectoryname\batchfile.bat"
サブディレクトリの名前に置き換える必要があります(バッチファイルをサブディレクトリに配置した場合は...そうでない場合は、値は/c "[TARGETDIR]batchfile.bat"
)であり、batchfile.batは次のようになります。バッチファイルのファイル名になります。それでおしまい。残りのインストールプロセスが完了すると、バッチファイルが実行されます。
わかりやすくするための例を次に示します。
私のバッチファイル: blah.bat
私のサブディレクトリ:mydir
その場合、cmd.exeを対象とするカスタムアクションの引数の値は次のようになります。
/c "[TARGETDIR]mydir\blah.bat"
それが誰かを助けることを願っています!
同じ結果を得るもう 1 つの方法は、対応する .bat ファイルを実行するカスタム アクションに .vbs ファイルを配置することです。次のコードは、セットアップ アプリケーション フォルダーに配置した "RunRegisterComponents.vbs" です。もちろん、[TARGETDIR] を Visual Studio のプロパティ ウィンドウに .vbs パラメータとして配置しました。
dim WshShell
Set WshShell = CreateObject("WScript.Shell")
' Read the "CustomActionData" property holding the install directory.
dim programDir
programDir= property("CustomActionData")
' Make the batch full file name and parameter
commandString = chr(34) & programDir & "RegisterComponents.bat" & chr(34) & " " & chr(34) &
programDir& chr(34)
' Set the current directory
WshShell.CurrentDirectory = programDir
' Run batch.
ret = WshShell.Run (commandString, 0, 0)
それは、カスタム アクションを設定したときです。
これがお役に立てば幸いです。
この記事を確認してください (この記事は非推奨です)。これは VB.NET に含まれていますが、C# にも適用されます。最も重要な部分は (C# に変換) 新しいクラス ライブラリを作成し、次の内容で新しいインストーラー クラスを追加することです。
override void Commit(IDictionary savedState)
{
base.Commit(savedState);
System.Diagnostics.Process.Start("myApp.bat","your bat arguments");
}
ここで、インストーラー プロジェクトにバッチ ファイルを追加します。セットアップ プロジェクトを作成し、バッチ ファイルを配置するサブディレクトリを含めて、通常どおりに構成します (サブディレクトリに配置したくない場合は、アプリケーション フォルダーに直接配置できます)。
[ファイル システム] ビュー ([ソリューション エクスプローラー] -> [表示] -> [ファイル システム] でプロジェクトを右クリック) で、実行するバッチ ファイルを追加します。
インストーラー プロジェクトをビルドします。
インストール プロセス中に相対パスを持つバッチ ファイルを実行しようとすると、確実に失敗します。これは、バッチ ファイルが、ファイルがインストールされた場所ではなく、インストーラーが実行されているディレクトリを考慮に入れるためです。バッチ ファイルを一時ディレクトリにコピーするインストーラー ビルダーを使用します。