Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 传递.msi参数以安装自定义操作_C#_Custom Action_Setup Deployment_Visual Studio Setup Proje - Fatal编程技术网

C# 传递.msi参数以安装自定义操作

C# 传递.msi参数以安装自定义操作,c#,custom-action,setup-deployment,visual-studio-setup-proje,C#,Custom Action,Setup Deployment,Visual Studio Setup Proje,我在Visual Studio 2013中有一个安装和部署项目,它为我的解决方案创建了一个.msi安装程序。我还有一个C#WinForms应用程序,可以在安装自定义操作中启动。如果用户从命令行启动.msi,是否有方法将命令行参数传递给在安装自定义操作期间运行的应用程序 我知道我可以使用CustomActionData参数提供安装自定义操作应用程序参数,因此我可以以某种方式动态地将其设置为.msi参数的任何值吗?或者有没有更简单/更好的方法 任何帮助都将不胜感激。您可以向应用程序添加安装程序类,并

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

我知道我可以使用CustomActionData参数提供安装自定义操作应用程序参数,因此我可以以某种方式动态地将其设置为.msi参数的任何值吗?或者有没有更简单/更好的方法


任何帮助都将不胜感激。

您可以向应用程序添加安装程序类,并覆盖
安装方法。然后可以访问
上下文.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
    }
}

更多信息可以在中找到。

这取决于“命令行参数”的含义,但我假设您指的是属性值,如:

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

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

因此,只需将可执行文件添加为自定义操作即可。在自定义操作的“属性”窗口中有一个参数设置。如果你给它一个值:

[MYPROP1];[MYPROP2]

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

/一=[MYPROP1]/二=[MYPROP2] 等等

从Everyone安装中将应用程序作为自定义操作运行并不总是有用的,主要是因为它们将使用本地系统帐户运行,因此无法访问安装用户的文件夹、某些数据库和网络等。如果您正在配置某些东西,则最好在第一次运行应用程序时运行它,这样它将在正常的交互式用户上下文中运行