Erreur de processus de démarrage du processus .NET lors de l'utilisation des informations d'identification (le descripteur n'est pas valide)

StackOverflow https://stackoverflow.com/questions/628191

  •  06-07-2019
  •  | 
  •  

Question

J'ai une application Windows Form qui fournit le nom d'utilisateur, le domaine et le mot de passe à StartInfo, ce qui génère ceci:

System.ComponentModel.Win32Exception: Le descripteur n'est pas valide    à System.Diagnostics.Process.StartWithCreateProcess (ProcessStartInfo startInfo)    à System.Diagnostics.Process.Start ()

Lorsque j'autorise les informations d'identification par défaut à l'utilisateur actuel, aucune erreur de ce type ne se produit et le processus que je lance fonctionne dans la mesure où il n'a pas besoin d'utiliser d'informations d'identification (les informations créditées sont nécessaires pour mapper un lecteur dans un script MSBuild. ). Voici le code qui remplit les informations de démarrage:

Process p = new Process();
ProcessStartInfo si = new ProcessStartInfo(buildApp, buildArgs);
si.WorkingDirectory = msBuildWorkingDir;
si.UserName = txtUserName.Text;
char[] psw = txtPassword.Text.ToCharArray();
SecureString ss = new SecureString();
for (int x = 0; x < psw.Length; x++)
{
    ss.AppendChar(psw[x]);
}
si.Password = ss;
si.Domain = "ABC";
si.RedirectStandardOutput = true;
si.UseShellExecute = false;
si.WorkingDirectory = txtWorkingDir.Text;
p.StartInfo = si;
p.Start();

Ce n'est pas que l'utilisateur / psw ne correspond pas, car lorsque je fournis un psw incorrect, par exemple, il le détecte. Ainsi, cette "poignée non valide". il se passe une fois que le credo est passé. Des idées sur ce que je pourrais omettre ou bousiller?

Était-ce utile?

La solution

Vous devez rediriger vos entrées, erreurs et sorties.

par exemple:

ProcessStartInfo info = new ProcessStartInfo("cmd.exe");
 info.UseShellExecute = false;
 info.RedirectStandardInput = true;
 info.RedirectStandardError = true;
 info.RedirectStandardOutput = true;
 info.UserName = dialog.User;

 using (Process install = Process.Start(info)) {
       string output = install.StandardOutput.ReadToEnd();
       install.WaitForExit();
       // Do something with you output data       
    Console.WriteLine(output);
 }

Microsoft a également déclaré que l’erreur devait être lue, "Impossible de rediriger l’entrée". (l'habitude d'avoir un lien, mais cela ne fonctionnait plus)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top