DAC で バッチ ファイルを使うには

今回は、Desktop App Converter(DAC) に指定するインストーラをバッチ ファイルにする方法を説明します。以前から、試して見ようと考えていましたが、なかなか作業ができていなかったものになります。最初に、変換するためのインストーラとして、以下のようなフォルダ構造があると仮定します。

  • C:\Work\BAT フォルダ : 変換の作業フォルダー
  • C:\Work\BAT\Input フォルダ : インストーラなどを配置するフォルダ
    MyApp.exe : 実行ファイル
    Install.bat : インストール用のバッチ ファイル

Install.bat には、次のような内容を記述しています。

 mkdir "%ProgramFiles%\MyApp"
xcopy ".\*" "%ProgramFiles%\MyApp" /S /E
exit 0

xcopy コマンドのソースに「.\*」のように、カレントからの相対パスを記述しているのが重要な点になります。

この準備ができたら、DAC を管理者権限で起動して、次のように入力します。

 cd C:\Work\BAT
DesktopAppConverter.exe -Installer ".\Input\Install.bat" -Destination "."
  -AppInstallPath "C:\Program Files\MyApp" 
  -AppExecutable "C:\Program Files\MyApp\MyApp.exe"
  -PackageName "myapp" -Publisher "CN=myapp" -Version "0.0.0.1" -Vervos

パラメータが長いので折り返していますが、カレントを変更して、DACのコマンドをワン ライナーで入力します。このコマンドでの特徴は次のようになります。

  • -Installer に バッチ ファイルを指定しています。
  • -InstallerArguments は省略しています。この理由は、バッチ ファイルで引数を処理していないからです。
  • -InstallerValidExitCodes は省略しています。この理由は、バッチ ファイルの最後で「exit 0」としてリターン コードを0(ゼロ)にしているからです。
  • -AppInstallPath は、アプリケーションのインストール先のフォルダをフルパスで指定します。
  • -AppExecutable は、アプリケーションの実行ファイルをフルパスで 指定します。

こうすることで、正常に変換を行うことができるようになります。

この時の注意事項は、インストール用のバッチ ファイルの xcopy コマンドのソース パスの記述方法になります。最初は、「.\Input\*」のように記述していました。この記述で実行すると、うまく実行はできるのですが、実行結果として「MyApp.exe が見つかりません」という警告が表示されて、出力先の「myapp\PackageFile フォルダ」内に、MyApp.exe が出力されていませんでした。この原因を調べていくと、次のようなことが判明しました。

  • インストール用のコンテナのインスタンス内の「C:\shared\installer」フォルダ内に、-Installer で指定したファイルがコピーされるということ。
    つまり、この例では「Installer.bat」を配置したフォルダである「C:\Work\BAT\Input」フォルダ内のファイルが再帰的にコピーされる。
  • 「C:\shared\installer\Install.bat」 は、「C:\shared\installer」をカレントにして呼び出されるということ。
    つまり、「.\Input」では、パスが間違っていて、ファイルがコピーされないということです。

結論から言えば、インストール用のバッチ ファイルは、バッチ ファイルを配置した場所をカレント フォルダとして呼び出されるので、このことを前提にパスを記述しないといけないということです。このように手順を踏めば、バッチ ファイルを使ってもアプリを変換することが可能になるわけです。