0

我正在将Windows服务从Visual Studio 2010迁移到VS2012,并且由于此人不支持Visual Studio安装项目,我试图使用WiX重新创建我的安装项目。将参数传递给安装程序使用WiX的Windows服务类

在VS2010上,我使用用户界面中的标准Textboxes表单将一些参数传递给我的Installer类,它将使用此信息来实例化实体框架的DbContext并使用ObjectContext.CreateDatabase()方法部署数据库。

这里是我怎么做我的安装程序类的摘录:

public override void Install(System.Collections.IDictionary stateSaver) 
    { 
     base.Install(stateSaver); 

     string dataSource = string.IsNullOrEmpty(Context.Parameters["DataSource"]) ? "." : Context.Parameters["DataSource"]; 
     // some more code... 
    } 

是否可以指定此参数与维克斯?

我试图通过在WiX的Xml的“Argument”参数上传递参数来做到这一点,但安装程序似乎并不接受它(它并没有指责任何错误,而是表现得好像我没有传递任何参数都

<ServiceInstall Id="ServiceInstaller" 
          Type="ownProcess" 
          Vital="yes" 
          Name="NFeConnectorService" 
          DisplayName="NFeConnector Service" 
          Description="Servico de Mensageria para NFe" 
          Start="auto" 
          Account="LocalSystem" 
          ErrorControl="ignore" 
          Interactive="no" 
          Arguments="/InitialCatalog=&quot;NFeConnector2&quot; " /> 

我也试着用下面的语法没有成功。?

Arguments="/InitialCatalog=NFeConnector2" 

Arguments="InitialCatalog=NFeConnector2" 

有没有人对我怎样可以通过这个参数来我的安装程序类的任何想法

回答

1

你不可能得到这个工作。问题是Visual Studio安装程序类不是由Windows Installer直接调用的。有一个未公开的接口调用C++ Dll,然后通过反射调用您的程序集和安装程序类。 VS生成一个调用这个C++的Dll传递一些与你的字符串串联的未记录参数。我不知道你已经尝试过了什么,但是除非你已经反向设计了这些调用并且引入了C++ Dll,否则找出了Dll的入口点和参数,那么它将无法工作。

简短的回答是不要打扰。安装程序类只是一个Visual Studio的东西,这就是它们不迁移的原因。 WiX支持C#自定义操作(请参阅WIX - Adding a C# custom action code之类的内容),并远离安装程序类。

+0

感谢您的回复。是的,我担心我必须那样做,我主要想知道是否有办法做到这一点......但是关于Installer Clas的大部分答案都表明最好的办法是远离它们。 –