これは、Visual Studio 2010 でコマンド ラインのみのプロパティ値を MSI に追加するために行ったことです。CommandLineSupport.js
次のコードを使用して、セットアップ プロジェクト (.vdproj) ディレクトリに作成します。
//This script adds command-line support for MSI installer
var msiOpenDatabaseModeTransact = 1;
if (WScript.Arguments.Length != 1)
{
WScript.StdErr.WriteLine(WScript.ScriptName + " file");
WScript.Quit(1);
}
WScript.Echo(WScript.Arguments(0));
var filespec = WScript.Arguments(0);
var installer = WScript.CreateObject("WindowsInstaller.Installer");
var database = installer.OpenDatabase(filespec, msiOpenDatabaseModeTransact);
var sql
var view
try
{
sql = "INSERT INTO `Property` (`Property`, `Value`) VALUES ('MYPROPERTY', 'MYPROPERTY=\"\"')";
view = database.OpenView(sql);
view.Execute();
view.Close();
database.Commit();
}
catch(e)
{
WScript.StdErr.WriteLine(e);
WScript.Quit(1);
}
次に、Visual Studio で展開プロジェクトをクリックしてプロジェクトのプロパティを表示し、次のように設定PostBuildEvent
します。
cscript.exe "$(ProjectDir)CommandLineSupport.js" "$(BuiltOuputPath)"
次に、カスタム アクションを使用して Delopyment プロジェクトをセットアップします。Primary Output をクリックして Custom Action Properties に移動し、CustomActionData
フィールドを/MYPROPERTY="[MYPROPERTY]"
次に、次のようにカスタム アクション インストーラー クラスでそのプロパティにアクセスできます。
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
string the_commandline_property_value = Context.Parameters["MYPROPERTY"].ToString();
}
最後に、cmd を実行できます。 C:\>Setup.msi MYPROPERTY=VALUE
これには、Orca をいじったり、受け入れられた回答のようなカスタム ダイアログ コントロールを使用したりする必要はありません。正しい .msi 名を持つように PostBuildEvent を変更する必要もありません。など。次のように、必要な数のプロパティを追加することもできます。
INSERT INTO `Property` (`Property`, `Value`) VALUES ('MYPROPERTY', 'MYPROPERTY=\"\"'),('MYPROPERTY2', 'MYPROPERTY2=\"\"', ('MYPROPERTY3', 'MYPROPERTY3=\"\"')) ";
楽しむ!