Comment puis-je attendre (bloquer) mon programme jusqu'à la fermeture d'un dialogue spécifique de mon processus démarré précédent?C# Attendre la fermeture du dialogue du processus démarré
Je commence pageant.exe pour charger une clé ssh. Pageant est commencé avec la classe "Process". Cela fonctionne bien.
Ma clé ssh a un mot de passe. Donc, mon programme/processus principal (celui-ci a démarré le processus) doit attendre que l'utilisateur entre la phrase secrète de la clé SSH.
J'ai une idée de la façon d'attendre, mais je ne sais pas comment le faire dans C#: Si le recueil demande la phrase secrète, une boîte de dialogue apparaît. Mon programme/processus principal peut donc attendre que la boîte de dialogue de phrase de passe soit fermée. Est-il possible de le faire en C#?
j'ai eu l'idée de here.
EDIT: a trouvé une solution
// wait till passphrase dialog closes
if(WaitForProcessWindow(cPageantWindowName))
{ // if dialog/process existed check if passphrase was correct
do
{ // if passphrase is wrong, the passphrase dialog is reopened
Thread.Sleep(1000); // wait till correct passphrase is entered
} while (WaitForProcessWindow(cPageantWindowName));
}
}
private static bool WaitForProcessWindow(string pProcessWindowName)
{
Process ProcessWindow = null;
Process[] ProcessList;
bool ProcessExists = false; // false is returned if process is never found
do
{
ProcessList = Process.GetProcesses();
ProcessWindow = null;
foreach (Process Process in ProcessList)
{ // check all running processes with a main window title
if (!String.IsNullOrEmpty(Process.MainWindowTitle))
{
if (Process.MainWindowTitle.Contains(pProcessWindowName))
{
ProcessWindow = Process;
ProcessExists = true;
}
}
}
Thread.Sleep(100); // save cpu
} while (ProcessWindow != null); // loop as long as this window is found
return ProcessExists;
}
Nous ne sommes généralement pas ici pour convertir le script Perl en C# pour vous. [demander]. Aussi les faits checkout amusants à [mcve] – MickyD
Cela peut aider http://stackoverflow.com/a/3147920/6248956 – YuvShap