我想运行自定义操作并搜索注册,然后在此之后设置一些会话变量
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"
,这会阻止以管理员身份运行自定义操作。
任何人都可以帮助我克服这一点。
答案 0 :(得分:2)
您无法在安装的延迟(提升)阶段修改会话属性。您可以在延迟的自定义操作期间读取会话属性,它需要由另一个自定义操作设置的特殊属性并使用session.CustomActionData
看起来您只是从注册表中读取,因此立即采取行动应该没有问题。