Windows インストーラーコミットでバッチファイルを実行
-
14-09-2019 - |
質問
プライマリ出力のインストール後にバッチ ファイルを実行するように Windows インストーラー MSI を変更することに成功しません。これを検索して多くの提案を見つけましたが、うまくいくものはありません。
- カスタムアクションの追加
- カスタム アクションは実行可能ファイルのみにすることができます。バッチファイルは実行可能ではありません。
- バッチ ファイルを実行する Windows Scripting Host 実行可能ファイルを作成します。
- 多くの人がこれを試みてきました。 それで, 、誰もこれを機能させることができませんでした。
- WIX または InstallShield を使用する
- 会社のインストーラーテクノロジーを変更する時間も権限もありません。
- Orca で .msi を編集し、カスタム プロパティ、カスタム アクションを追加してから、InstallExecuteSequence を編集します。
- 私はこれを何時間も試してきましたが、実行時にシステムエラーをスローするインストーラーしか作成できませんでした。
解決
あなたが上で言ったことは間違っています:
カスタムアクションは実行可能ファイルのみになります。バッチファイルは実行可能ではありません。
カスタム アクション (InstallShield などのツールがなくても) は、.EXE、VBScript、JScript、または DLL ベースにすることができます。DLL を作成する場合は、バッチ ファイルを呼び出したり、システムに必要な変更を加えたりするコードを自由に作成できます。制限はありません。
アップデート:私にとってうまくいった例:(CustomAction テーブルのエントリ)
Action Test
Type 34
Source SystemFolder
Target cmd.exe /c c:\test.bat
ExtendedType <blank>
他のヒント
Iは、本質的になるEXEを作成することによってこの問題を解決することができた。
System.Diagnostics.Process.Start(pathToBatchFile);
そしてMSIファイルへのEXEを追加するカスタムアクションとして、それを実行します。
「William Leara」が提案した答えは非常に良いスタートですが、より良い解決策を見つけました ここ 言及する価値があります。
この方法のもう 1 つの利点は、バッチ ファイルをルート C フォルダーではなくアプリケーション インストール フォルダーに配置できることですが、特別なフラグを使用して実行を延期します。 ファイルコピー アクションも使用します いいえ偽装する から実行するにはより高い特権が必要です プログラムファイル
いくつかのメモ:
- 使用 ターゲットディレクトリ の代わりに インストールディレクトリ
- 必ずパスを引用してください。
これらは私の 2 つのカスタム アクションです。私の場合は強制したいのですが ネイティブ コマンドプロセッサはいくつかのレジストリエントリを修正するため、私は使用しません コンスペック.
最初のアクション (タイプ 50) は、タイプが 50+1024+2048 であるため、ターゲットの入力引数を使用してソース内のコマンドを実行します。 いいえ偽装する フラグ。
- アクション: ファイナルアクション
- タイプ: 3122
- ソース: NCOM
- 目標: /c "[TARGETDIR]Fixup.bat"
2 番目のアクションの定義 NCOM すぐにプロパティ:
- アクション: FinalNativeSys
- タイプ: 51
- ソース: NCOM
- 目標: [Windowsフォルダー]System32\cmd.exe
次に、これらのアクションを追加する必要があります インストール実行シーケンス:
- アクション: ファイナルアクション
- 状態: インストールされていない
- 順序: 5002
そしてこれは:
- アクション: FinalNativeSys
- 状態:
- 順序: 5001
私の場合、呼び出すアクションを簡単に調整できることに注意してください。 reg.exe インポート Fixup.reg あまりにも。ついに使えるようになります ムシトラン 提案どおり ここ ビルド後の手順を自動化します。
あなたが好きなディレクトリに変更し、何が必要ありません別のbatファイルをCALL
する一時.BATファイルを作成EXEを作成します。
そのexeファイルを使用するようにカスタムアクションを知らせるます。
CPP exeファイルの最初の引数は、exeファイル自体へのパスです。これは、自分自身を方向付けるために使用することができ、その情報は、一時.BAT
の製作に使用することができ私の場合、私は、「カスタムアクション」を追加しました。
その後cmd.exeの編集 "引数" のプロパティで:フォルダの
にcmd.exeを選択してください
"カスタムアクションを追加" を選択し、 "インストール"(\ WINDOWS \ SYSTEM32 \ CMD.EXE C) > "/インストール/ C C:\ MYAPP.EXE --exec-何らかのアクション"