InstallerSetup.cs在from1.cs中传递安装参数

时间:2018-01-19 05:57:38

标签: c# parameters windows-installer visual-studio-setup-proje

我已正确覆盖InstallerSetup.cs中的提交我不希望将用户输入的值写入app.config,而是我想传递字符串Context.Parameters [" TESTPARAMETER"];在load函数的form1.cs中的另一个类。我试过string test = InstallerSetup.Context.Parameters["TESTPARAMETER"]; 但获取InstallerSetup.Context为null。请帮忙。

InstallerSetup.cs

public static string SQLSERVERNAME = "";
public static string HMSTENANTDB;
public static string SQLLOGIN;
public static string SQLPASSWORD;

public override void Commit(IDictionary savedState)
{
    base.Commit(savedState);
    try
    { 
        SQLSERVERNAME = Context.Parameters["SQLSERVERNAME"];
        HMSTENANTDB = Context.Parameters["HMSTENANTDB"];
        SQLLOGIN = Context.Parameters["SQLLOGIN"];
        SQLPASSWORD = Context.Parameters["SQLPASSWORD"];  
    }
    catch (Exception e)
    {
         MessageBox.Show("Failed to update the application configuration file : " + e.Message);
         base.Rollback(savedState);
    }
}

from1.cs

InstallerSetup InsSetup = new InstallerSetup();
string Vsqlserver = InsSetup.Installers.Count.ToString();
string Vtenant = "";
if (InsSetup.Context != null)
{
    Vtenant = InsSetup.Context.Parameters["HMSTENANTDB"];
}
else
{
    Vtenant = "context is null";
}

1 个答案:

答案 0 :(得分:0)

As far as I can tell, the issue is that the property values are not being passed into the custom action. That would be the most obvious explanation. A commentfrom the poster says:

"passed those parameters to the custom action...................................... SQLSERVERNAME = Context.Parameters["SQLSERVERNAME"]; etc...

//................there is only these 4 lines in my custom actions"

which is essentially repeating the code that was previously posted.

This is NOT passing the values into the custom action. This is retrieving values which must already have been passed into the custom action.

Assuming that the custom action has been correctly added to (typically) the install nod of the custom action, and also assuming that the property names are in a TextBoxes dialog in the install, the values must be passed in to the custom action via the CustomActionData settings. To use one example, the CustomActionData setting must be something like:

/SQLSERVERNAME=[SQLSERVERNAME]

or /SQLSERVERNAME=[EDITA1] if EDIOTA1 is being used because that's the default property name.

However there is no reference to the TextBoxes (or any other) install dialog in the original question, so it's not really clear where the value of (say) SQLSERVERNAME is supposed to come from. It may be passed in on the msiexec command line, for example.