2017-10-20 6 views
1

J'ai une action personnalisée qui lit l'entrée de Registre. Si le session["UtillRegKey"] a déjà sur le registre, printerIndex devrait incrémenter. Le problème est déjà le registre déjà, prnKey toujours devenir nul. Je ne pense pas pour la lecture du registre n'est pas nécessaire l'autorisation, mais même après avoir défini la permission aussi le résultat était le même. Et puis j'ai créé une application sous forme de fenêtre, et j'y ai ajouté la même fonction, et cela fonctionne comme je m'y attendais.L'action personnalisée ne peut pas accéder à la clé de Registre pour lire

Quelqu'un peut-il expliquer pourquoi ce prnKey = prnKey.OpenSubKey(registryPath, false); donne null avec l'action personnalisée WIX. et comment puis-je surmonter ce problème.

[CustomAction] 
public static ActionResult RegistryDetails(Session session) 
{ 
    try 
    { 
     string registryPath = session["UtillRegKey"]; 
     int printerIndex = 1; 
     RegistryKey prnKey = Registry.LocalMachine; 
     prnKey = prnKey.OpenSubKey(registryPath, false); 

     if (null != prnKey) 
     { 
      global::System.Windows.Forms.MessageBox.Show("Not NUll"); 
      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(); 
     CurrentSession.Message(InstallMessage.Error, exceptionRec); 

     return ActionResult.Failure; 
    } 
    return ActionResult.Success; 
} 

Répondre

1

S'il n'y a pas une clé alors prnKey = null donc, si ce n'est pas un problème de permision, alors il faut que la clé n'est pas disponible là-bas. Ce que vous devriez savoir de construire avec x86 et l'exécuter sur un x64 peut vous causer des problèmes. Parce que le chemin n'est pas le même. soit vous devez construire pour la configuration correcte ou Essayez explicitement ouvert

RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64)