2017-09-18 3 views
0

que je veux exécuter une action personnalisée et seach registy puis définissez quelques variables de session après queaction personnalisée fonctionne avec privilèges d'administration et les variables de session est défini

Heare est ma fonction d'action personnalisée

[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; 
} 

mais lancer cette action personnalisée, j'ai besoin des privilèges d'administration Donc j'ai défini Execute="deferred" & Impersonate="no" de ma définition d'action personnalisée. Cela rend session["PrinterNo"] & session["UtillRegKey"] inaccessible. car il devrait être Execute="immediate" pour accéder aux variables de session. mais je ne peux pas définir comme Execute="immediate", ce qui empêchera l'exécution d'une action personnalisée exécutée en tant qu'administrateur.

Quelqu'un peut-il m'aider à surmonter cela.

Répondre

2

Vous ne pouvez pas modifier les propriétés de session pendant la phase différée (élevée) de l'installation. Vous pouvez lire les propriétés de la session pendant une action personnalisée différée et utiliser une propriété spéciale définie par une autre action personnalisée et utiliser session.CustomActionData

Il semble que vous lisez uniquement à partir du registre, cela ne devrait poser aucun problème. .