2010-04-26 3 views
1

Grâce au programme d'installation de mon application de bureau (code C#), je souhaite exécuter un processus externe. Je le fais en utilisant le code suivant.Accès à l'entrée de Registre à partir d'un processus démarré avec la méthode System.Diagnostics.Process.Start()

  ProcessStartInfo sinfo = new ProcessStartInfo(); 
      sinfo.FileName = filePath; 
      sinfo.WorkingDirectory = workingDir; 
      sinfo.UseShellExecute = false; 
      using (Process proc = Process.Start(sinfo)) 
      { 
       proc.WaitForExit(); 
       int code = proc.ExitCode; 
      } 

Mon processus externe tente de lire fondamentalement une chose d'entrée de registre et processus avec (il lit seulement, ne pas écrire au reg).

Bien que je confirme que les valeurs d'entrée de registre ont déjà été mises à jour par le programme d'installation (et que je peux lire manuellement les entrées reg via regedit), le processus externe ne peut pas les lire. Son essayant de se lire comme suit:

   using (RegistryKey rk = Registry.CurrentUser.OpenSubKey(regKey)) 
       { 
        return (string)rk.GetValue(subKey); 
       } 

Quand je mets un point d'arrêt sur les lignes ci-dessus, je vois que rk n'a pas sous-clés à l'intérieur. Je fais tout cela dans Win7 env (je ne sais pas si l'UAC cause les problèmes)

Maintenant, quand je lance directement l'application externe manuellement (ie double-cliquez sur l'application de l'application), je suis capable de lire les entrées reg facilement. On dirait que je fais quelque chose de mal en commençant le processus. Quelqu'un a des idées quoi?

Merci, Kapil

Répondre

0

Vous pouvez avoir un problème d'accès.

Essayez de remplir les propriétés de sinfo.username et sinfo.password et veiller à ce qu'un utilisateur disposant de droits d'accès administratifs démarre le processus

ProcessStartInfo sinfo = new ProcessStartInfo(); 
     sinfo.FileName = filePath; 
     sinfo.WorkingDirectory = workingDir; 
     sinfo.UseShellExecute = false; 
     sinfo.UserName = "username1"; 
     SecureString password = new SecureString(); 
     foreach (char c in "password1".ToCharArray()) { 
      password.AppendChar(c); 
     } 
     sinfo.Password = password; 
     using (Process proc = Process.Start(sinfo)) 
     { 
      proc.WaitForExit(); 
      int code = proc.ExitCode; 
     } 
+0

Merci pour la réponse Martin. Mais comment puis-je remplir les propriétés username et passwd. Existe-t-il une API Windows pour obtenir le nom d'utilisateur et le mot de passe de l'utilisateur actuel? Je doute fortement. – Kapil