6

プライマリ出力がインストールされた後、バッチファイルを実行するようにWindowsインストーラーMSIを変更することに成功していません。私はこれを検索し、多くの提案を見つけましたが、うまくいくものは何もありません。

カスタムアクションを追加する
カスタムアクションは実行可能ファイルのみです。バッチファイルは実行可能ではありません。

バッチファイルを実行するWindowsScriptingHost実行可能ファイルを作成します
SOを含め、多くの人がこれを試みましたが、誰もこれを機能させることができませんでした。

WIXまたはInstallShieldを使用する
会社のインストーラーテクノロジを変更する時間や権限がありません。

Orcaを使用して.msiを編集し、カスタムプロパティを追加してから、カスタムアクションを追加してから、InstallExecuteSequenceを編集します。
私はこれを何時間も試してきましたが、実行時にシステムエラーをスローするインストーラーのみを作成しました。
4

5 に答える 5

10

あなたが上で言ったことは正しくありません:

カスタムアクションは実行可能ファイルのみです。バッチファイルは実行可能ではありません。

カスタムアクション(InstallShieldなどのツールがなくても)は、.EXE、VBScript、JScript、またはDLLベースにすることができます。DLLを作成する場合は、バッチファイルを呼び出したり、システムに変更を加えたりするコードを記述できます。制限はありません。

更新:私のために働いた例:( CustomActionテーブルのエントリ)

Action Test
Type 34
Source SystemFolder
Target cmd.exe /c c:\test.bat
ExtendedType <blank>
于 2009-06-15T22:27:43.293 に答える
2

基本的に次のもので構成されるEXEを作成することで、これを解決することができました。

System.Diagnostics.Process.Start(pathToBatchFile);

EXEをMSIファイルに追加し、カスタムアクションとして実行します。

于 2009-06-16T16:12:06.740 に答える
1

「WilliamLeara」によって提案された答えは非常に良いスタートですが、私はここで言及する価値のあるより良い解決策を見つけました。

この方法のもう1つの利点は、バッチファイルをルートCフォルダーではなくアプリケーションインストールフォルダーに配置できることですが、FileCopyアクションの後に実行を延期するために特別なフラグを使用します。また、noImpersonateを使用して、から実行するために必要なより高い特権を持ちます。プログラムファイル

いくつかの注意:

  1. INSTALLDIRの代わりにTARGETDIRを使用する
  2. パスを引用してください。

これらは私の2つのカスタムアクションです。私の場合、ネイティブコマンドプロセッサにいくつかのレジストリエントリを修正させたいので、 COMSPECは使用しません。

最初のアクション(タイプ50)は、ターゲットの入力引数を使用してソースでコマンドを実行します。これは、タイプが50 + 1024 + 2048であるため、noImpersonateフラグを使用した遅延アクションであるためです。

  • アクション:FinalAction
  • タイプ:3122
  • 出典:NCOM
  • ターゲット:/ c "[TARGETDIR] Fixup.bat"

2番目のアクションは、NCOMプロパティをすぐに定義します。

  • アクション:FinalNativeSys
  • タイプ:51
  • 出典:NCOM
  • ターゲット:[WindowsFolder] System32 \ cmd.exe

次に、これらのアクションをInstallExecuteSequenceに追加する必要があります。

  • アクション:FinalAction
  • 状態:インストールされていません
  • シーケンス:5002

そしてこれ:

  • アクション:FinalNativeSys
  • 調子:
  • シーケンス:5001

私の場合、reg.exeimportFixup.regを呼び出すアクションを簡単に調整できることに注意してください。最後に、ポストビルドでここで提案されているようにmsitranを使用して、手順を自動化できます。

于 2012-02-07T17:40:00.427 に答える
1

一時的な.batファイルを作成して必要なディレクトリに変更するEXEと、必要な処理CALLを実行する別のbatファイルを作成します。

そのexeを使用するようにカスタムアクションに指示します。

CPP exeの最初の引数は、exe自体へのパスです。これは自分自身を方向付けるために使用でき、その情報は一時的な.batの作成に使用できます

于 2011-06-16T17:58:37.323 に答える
0

私の場合、「カスタムアクション」を追加しました。
フォルダ「インストール」で「カスタムアクションの追加」を選択します
cmd.exe(c:\ windows \ system32 \ cmd.exe)を選択
します次にcmd.exeのプロパティで「引数」を
「/ Install / cC:\myApp.exe 」に編集します--exec-some-action "

于 2015-10-08T12:25:09.747 に答える