0

セットアップ アプリケーションでいくつかの UI コントロールを表示するための条件の 1 つは、ファイルが存在するかどうかに基づいています。

インストール後に OnBeforeInstall イベントが発生し、変更したいダイアログがその前に表示されるため、このチェックはカスタム アクションでは実行できません。

WiXを使用していた場合、次のように簡単になります

<Property Id="FILEEXISTS">
   <DirectorySearch Id="CheckFileDir"
                 Path="[CommonAppDataFolder]Manufacturer\Product"
                 Depth="0">
      <FileSearch Id="CheckFile"
              Name="Filename.ext" />
   </DirectorySearch>
</Property>

WiXなしでそれを行う方法は?

4

2 に答える 2

1

WiX コードをマージ モジュール プロジェクトに配置し、それをセットアップ プロジェクトで使用できます。

Visual Studio 展開プロジェクトの引き換え

FWIW、IMO、セットアップ プロジェクトはひどいものです。Microsoft は VS2012 でそれを殺しましたが、ユーザーの声のサイトには、インストーラーについて何も知らない人たちがインストーラーを復活させようとする何千もの苦情が寄せられています。

私だったら、あなたがカスタム UI の仕事をしているので、InstallShield Professional の 1 つのコピーに 2000 ドルを費やし、Windows Installer XML を使用するマージ モジュールを採用します。確かに、これはすべて WiX だけを使用して実行できますが、節約された時間は $ の価値があります。

Windows Installer XML を使用した InstallShield の拡張 - 証明書

于 2013-06-26T14:44:44.253 に答える
0

MSI ファイルにはビルド後の JScript が必要です。または、Orca で手動で行うこともできます。

var installer = WScript.CreateObject("WindowsInstaller.Installer");
var filespec = WScript.Arguments(0);
var msiOpenDatabaseModeTransact = 1;
var database = installer.OpenDatabase(filespec, msiOpenDatabaseModeTransact);

Execute("INSERT INTO `AppSearch` (`Property`, `Signature_`) VALUES ('FILEEXISTS', 'CheckFile')");
Execute("INSERT INTO `DrLocator` (`Signature_`, `Parent`) VALUES ('CheckFile', 'CheckFileDir')");
Execute("INSERT INTO `DrLocator` (`Signature_`, `Path`, `Depth`) VALUES ('CheckFileDir', '[CommonAppDataFolder]Manufacturer\\Product', 0)");
Execute("INSERT INTO `Signature` (`Signature`, `FileName`) VALUES ('CheckFile', 'Filename.ext')");

function Execute(sql) {
    view = database.OpenView(sql);
    view.Execute();
    view.Close();
}
于 2013-06-26T12:04:46.963 に答える