如何检测是否提供运行msi的/ norestart

时间:2015-02-03 23:17:58

标签: windows windows-installer

我正在使用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。

1 个答案:

答案 0 :(得分:0)

我自己已经想到了这一点。

CustomActionData 设置为 / reboot = [REBOOT]

然后读取值:

Context.Parameters["reboot"]

如果提供了/ norestart选项,则重启值将为 ReallySuppress