1

这是我在 ManagedUI 中填写会话的代码:

void next_Click(object sender, EventArgs e)
{
    MsiRuntime.Session["PASSWORD"] = password.Text;
    MsiRuntime.Session["DOMAIN"] = domain.Text;

    Shell.GoNext();
}

这是我的自定义操作:

public class CustomActions
{
    [CustomAction]
    public static ActionResult InstallService(Session session)
    {
        MessageBox.Show(session["Password"]); // always shows an empty message
        return ActtionResult.Success;
    }
    ...

我还没有弄清楚我的代码有什么问题?我已将数据填充到会话中,但无法在 CustomAction 中访问它。

4

2 回答 2

0

在您的 CustomAction 中,它必须是:

MessageBox.Show(session["PASSWORD"]); //upper case "PASSWORD" instead of "Password"

公共属性名称必须是大写的(因为您要在对话框中设置要传递到安装序列中的属性,所以它必须是公共的)。

http://www.advancedinstaller.com/user-guide/properties.html

于 2016-04-15T19:22:47.617 回答
-3

您需要通过命令提示发送您的对象。例如:

  using (var p = new Process())
                {
                    var info = new ProcessStartInfo
                    {
                        WindowStyle = ProcessWindowStyle.Hidden,
                        FileName = @"C:\Windows\System32\cmd.exe",
                        Arguments = string.Format("/c msiexec /i \"{0}\\{6}.msi\" PATHNAME=\"{0}\" SSLCERTPATH=\"{1}\"" +
                        " MSINEWINSTANCE=1 TRANSFORMS=\":{2}\" USERPATH={3} ENVIRONMENTPATH={4} SSLCERTPASS=\"{5}\" /L*v \"{0}\\{6}Log.txt\""
                        , XmlSettings.EnvironmentFolderPath, FindCertificates.SslCertPath, environment, XmlSettings.IisUserFolderPath,
                        XmlSettings.EnvironmentFolderPath, FindCertificates.SslCertPass, msiName),
                        UseShellExecute = false,
                        CreateNoWindow = true
                    };
                    p.StartInfo = info;
                    p.Start();
                    p.WaitForExit();
                }

然后在你的 wxs 项目中:

  <Property Id="SITEPHYSPATH"  Hidden="yes"/>
    <Property Id="USERPATH"  Hidden="yes"/>
    <Property Id="ENVIRONMENTPATH"  Hidden="yes"/>
    <Property Id="THUMBPRINT"  Hidden="yes"/>
    <Property Id="PATHNAME" Hidden="yes" />

最后在自定义操作中设置您的对象:

var thumbprint = session["THUMBPRINT"];
于 2016-03-07T13:41:09.437 回答