自定义操作使用管理员权限和设置会话变量运行

时间:2017-09-18 12:00:23

标签: wix wix3.6

我想运行自定义操作并搜索注册,然后在此之后设置一些会话变量

heare是我的自定义动作功能

[CustomAction]
public static ActionResult RegistryDetails(Session session)
{
    try
    {
        CurrentSession = session;

        string registryPath = @"SOFTWARE\XXX\Printers";
        int printerIndex = 1;
        RegistryKey prnKey = Registry.LocalMachine;

        prnKey = prnKey.OpenSubKey(registryPath);

        List<string> subKeyList = new List<string>();
        subKeyList.AddRange(prnKey.GetSubKeyNames());

        while(subKeyList.Contains(printerIndex.ToString()))
        {
            printerIndex++;
        }

        string newRegistryPath = registryPath + "\\" + printerIndex.ToString();
        session["UtillRegKey"] = newRegistryPath;
        session["PrinterNo"] = printerIndex.ToString();
    }
    catch (Exception ex)
    {

        CurrentSession.Log(ex.Message);
        Record exceptionRec = new Record(0);
        exceptionRec[0] = "Errors -" + ex.StackTrace.ToString();
        return ActionResult.Failure;
    }

    return ActionResult.Success;
}

但要运行此自定义操作,我需要管理员权限 所以我设置Execute="deferred"&amp;我的自定义操作定义的Impersonate="no"。 这使session["PrinterNo"]&amp; session["UtillRegKey"]无法访问。因为它应该Execute="immediate"来访问会话变量。 但我无法设置为Execute="immediate",这会阻止以管理员身份运行自定义操作。

任何人都可以帮助我克服这一点。

1 个答案:

答案 0 :(得分:2)

您无法在安装的延迟(提升)阶段修改会话属性。您可以在延迟的自定义操作期间读取会话属性,它需要由另一个自定义操作设置的特殊属性并使用session.CustomActionData

看起来您只是从注册表中读取,因此立即采取行动应该没有问题。