3

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

我知道我可以使用CustomActionData参数提供Install Custom Action应用参数,所以我可以以某种方式动态地将其设置为任何.msi参数。还是有更容易/更好的方法来做到这一点?

任何帮助,将不胜感激。

回答

1

您可以将安装程序类添加到您的应用程序并覆盖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找到。

0

这取决于你所说的“命令行参数”的意思,但我假设你的意思的属性值,如像:

MSIEXEC/I [路径微星] MYPROP1 =这MYPROP2 = THAT

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

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

[MYPROP1]; [MYPROP2]

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

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

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