37

セットアップ プロジェクトでは、「.exe、.dll、.js、.vbs」などの実行可能ファイルは受け入れられ.batますが、カスタム アクションでファイルを実行する方法はありません。

問題は、*.batインストール中にファイルを実行する方法です。

4

4 に答える 4

63

さて、多くの検索と試行錯誤の末、私はこれを解決しました。これが最善の方法かどうかはわかりませんが、機能します。

シナリオは次のとおりです。VisualStudioセットアッププロジェクトを介して展開したいアプリケーションがあります。アプリケーションファイルに加えて、バッチ(.bat)ファイルを含むサブディレクトリをターゲットディレクトリに作成したいと思います。このファイルをインストールプロセスの最後に実行したいと思います。

これがあなたがすることです:

  1. セットアッププロジェクトを作成し、バッチファイルを配置するサブディレクトリを含めて通常どおりに構成します(サブディレクトリに配置したくない場合は、アプリケーションフォルダーに直接配置できます)。
  2. [ファイルシステム]ビュー([ソリューションエクスプローラー]->[表示]->[ファイルシステム]でプロジェクトを右クリック)で、実行するバッチファイルcmd.exe(C:\ Windows \ System32 \ cmd.exe)を追加します。
  3. [カスタムアクション]ビューを開きます([ソリューションエクスプローラー]->[表示]->[カスタムアクション]でプロジェクトを右クリックします)
  4. 「コミット」を右クリックし、「カスタムアクションの追加」を選択します
  5. cmd.exeに移動して選択します。
  6. 新しく作成されたカスタムアクションのプロパティパネルを開きます。
  7. Argumentsプロパティから/Commitを削除します。
  8. Argumentsプロパティに次のように入力します。subdirectorynameは/c "[TARGETDIR]subdirectoryname\batchfile.bat"サブディレクトリの名前に置き換える必要があります(バッチファイルをサブディレクトリに配置した場合は...そうでない場合は、値は/c "[TARGETDIR]batchfile.bat")であり、batchfile.batは次のようになります。バッチファイルのファイル名になります。

それでおしまい。残りのインストールプロセスが完了すると、バッチファイルが実行されます。

わかりやすくするための例を次に示します。

私のバッチファイル: blah.bat
私のサブディレクトリ:mydir

その場合、cmd.exeを対象とするカスタムアクションの引数の値は次のようになります。

/c "[TARGETDIR]mydir\blah.bat"

それが誰かを助けることを願っています!

于 2011-06-08T22:27:35.637 に答える
7

同じ結果を得るもう 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)

それは、カスタム アクションを設定したときです。

ここに画像の説明を入力

これがお役に立てば幸いです。

于 2014-10-23T07:12:04.313 に答える
5
  1. この記事を確認してください (この記事は非推奨です)。これは VB.NET に含まれていますが、C# にも適用されます。最も重要な部分は (C# に変換) 新しいクラス ライブラリを作成し、次の内容で新しいインストーラー クラスを追加することです。

    override void Commit(IDictionary savedState)
    {
         base.Commit(savedState);
         System.Diagnostics.Process.Start("myApp.bat","your bat arguments");
    }
    
  2. ここで、インストーラー プロジェクトにバッチ ファイルを追加します。セットアップ プロジェクトを作成し、バッチ ファイルを配置するサブディレクトリを含めて、通常どおりに構成します (サブディレクトリに配置したくない場合は、アプリケーション フォルダーに直接配置できます)。

  3. [ファイル システム] ビュー ([ソリューション エクスプローラー] -> [表示] -> [ファイル システム] でプロジェクトを右クリック) で、実行するバッチ ファイルを追加します。

  4. インストーラー プロジェクトをビルドします。

于 2012-07-06T08:11:42.510 に答える
0

インストール プロセス中に相対パスを持つバッチ ファイルを実行しようとすると、確実に失敗します。これは、バッチ ファイルが、ファイルがインストールされた場所ではなく、インストーラーが実行されているディレクトリを考慮に入れるためです。バッチ ファイルを一時ディレクトリにコピーするインストーラー ビルダーを使用します。

于 2010-05-14T12:01:03.130 に答える