我正在使用visual studio安装项目构建MSi。我希望根据/ norstart选项运行不同的自定义操作。我应该使用什么条件来检测是否提供了/ norestart?
如果这是不可能的,我正在考虑设置一个属性。这是我的理论。使用Orca设置REBOOT = Force。如果我想禁止重启,请运行msi as
foo.msi /quiet REBOOT=ReallySuppress
从代码中读取属性,例如
String inputFile = @"C:\Users\Administrator\Desktop\foo.msi";
// Get the type of the Windows Installer object
Type installerType = Type.GetTypeFromProgID("WindowsInstaller.Installer");
// Create the Windows Installer object
WindowsInstaller.Installer installer = (WindowsInstaller.Installer) Activator.CreateInstance(installerType);
// Open the MSI database in the input file
var database = installer.OpenDatabase(inputFile, 0);
// Open a view on the Property table for the version property
var view = database.OpenView("SELECT * FROM `Property`");
//View view = database.OpenView("SELECT * FROM Property");
// Execute the view query
view.Execute(null);
// Get the record from the view
Record record = view.Fetch();
// Get the version from the data
//string version = record.get_StringData(2);
while (record != null)
{
logger.LogMessage(record.get_StringData(0) + '=' + record.get_StringData(1) + '=' + record.get_StringData(2) + '=' + record.get_StringData(3));
record = view.Fetch();
}
这不起作用,因为它总是读取REBOOT = Force。
答案 0 :(得分:0)
我自己已经想到了这一点。
将 CustomActionData 设置为 / reboot = [REBOOT] 。
然后读取值:
Context.Parameters["reboot"]
如果提供了/ norestart选项,则重启值将为 ReallySuppress