我在 Visual Studio 2013 中有一个安装和部署项目,它为我的解决方案创建了一个 .msi 安装程序。我还有一个在安装自定义操作中启动的 C# WinForms 应用程序。如果用户从命令行启动 .msi,有没有办法将命令行参数传递给在安装自定义操作期间运行的应用程序?
我知道我可以使用 CustomActionData 参数提供安装自定义操作应用程序参数,所以我可以以某种方式将其动态设置为 .msi 参数吗?还是有更简单/更好的方法来做到这一点?
任何帮助,将不胜感激。
我在 Visual Studio 2013 中有一个安装和部署项目,它为我的解决方案创建了一个 .msi 安装程序。我还有一个在安装自定义操作中启动的 C# WinForms 应用程序。如果用户从命令行启动 .msi,有没有办法将命令行参数传递给在安装自定义操作期间运行的应用程序?
我知道我可以使用 CustomActionData 参数提供安装自定义操作应用程序参数,所以我可以以某种方式将其动态设置为 .msi 参数吗?还是有更简单/更好的方法来做到这一点?
任何帮助,将不胜感激。
您可以将安装程序类添加到您的应用程序并覆盖该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
}
}
更多信息可以在文档中找到。
这取决于您所说的“命令行参数”是什么意思,但我假设您的意思是属性值,例如:
msiexec /I [你的 msi 路径] MYPROP1=THIS MYPROP2=THAT
并且您想将 MYPROP1 和 MYPROP2 值传递给自定义操作。
因此,只需将您的可执行文件添加为自定义操作。在自定义操作的属性窗口中有一个参数设置。如果你给它一个值:
[MYPROP1];[MYPROP2]
这些将在安装时解析为实际值并传递到您的命令行。使用您的命令行期望看到的格式,例如:
/one=[MYPROP1] /two=[MYPROP2] 等等。
将应用程序作为每个人安装的自定义操作运行并不总是有用的,主要是因为它们将使用本地系统帐户运行,因此无法访问安装用户的文件夹、某些数据库、网络等。如果您正在配置某些东西,通常最好在您的应用程序第一次运行时运行它,这样它将在正常的交互式用户上下文中运行。