传递.msi Args以安装自定义操作

时间:2016-11-04 19:58:29

标签: c# custom-action setup-deployment visual-studio-setup-proje

我在Visual Studio 2013中有一个安装和部署项目,它为我的解决方案创建了一个.msi安装程序。我还有一个在安装自定义操作中启动的C#WinForms应用程序。如果用户从命令行启动.msi,有没有办法将命令行参数传递给在安装自定义操作期间运行的应用程序?

我知道我可以使用CustomActionData参数提供Install Custom Action应用程序参数,因此我能以某种方式动态地将其设置为.msi参数是什么?或者有更简单/更好的方法吗?

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

您可以向应用添加安装程序类并覆盖Install方法。然后,您可以访问Context.Parameters属性中的命令行参数。

[RunInstaller(true)]
public class CustomInstaller : System.Configuration.Install.Installer
{
    public override void Install(IDictionary stateSaver)
    {
        base.Install(stateSaver);
        //this.Context.Parameters contains the command line arguments
    }
}

更多信息可在documentation

中找到

答案 1 :(得分:0)

这取决于你的意思"命令行参数",但我认为你的意思是属性值,如:

msiexec / I [你的msi的路径] MYPROP1 =这个MYPROP2 =那个

并且您希望将MYPROP1和MYPROP2值传递到自定义操作中。

所以只需将您的可执行文件添加为自定义操作即可。在自定义操作的属性窗口中,有一个Arguments设置。如果你给它一个值:

[MYPROP1]; [MYPROP2]

这些将在安装时解析为实际值并传递到命令行。使用命令行期望看到的格式,例如:

/ one = [MYPROP1] / two = [MYPROP2] 等等。

从Everyone安装中将应用作为自定义操作运行并不总是有用,主要是因为它们将与本地系统帐户一起运行,因此无法访问安装用户的文件夹,一些数据库,网络等。如果您正在配置某些内容,那么在第一次运行应用程序时运行它通常会更好,因此它将在正常的交互式用户上下文中运行。