2017-09-08 3 views
1

J'intègre avec un logiciel tiers qui s'exécute avec un fichier .hta dans mshta.exe. Mon application est écrite en C#Vérifiez quel fichier HTA est en cours d'exécution

Je dois détecter si le fichier .hta est déjà en cours d'exécution afin que je puisse le lancer avant de commencer à lui envoyer des messages. Avec d'anciennes intégrations avec d'autres tiers, j'ai vérifié l'exe dans la liste des processus, mais je ne pense pas que je peux juste chercher mshta.exe parce qu'ils pourraient exécuter un autre fichier .hta.

J'ai aussi essayé saisir le process.MainWindowTitle de Process.GetProcesses(), mais même si la fenêtre mshta.exe montre un titre, la propriété MainWindowTitle est vide.

Quelqu'un sait-il une méthode où je pourrais comprendre que mshta.exe est en cours d'exécution d'un fichier hta spécifique?

+0

Vérifiez la ligne de commande de chaque mshta.exe, il doit contenir le chemin du hta en cours d'exécution. – Teemu

+0

Pouvez-vous poster le code source de votre HTA? – Hackoo

+0

Malheureusement, c'est un fichier HTA 3ème partie, donc je ne peux pas le partager – spectacularbob

Répondre

1

Grâce au commentaire de Teemu, j'ai trouvé que le chemin .hta est bien dans les arguments de la ligne de commande. Toutefois, cette information n'est pas dans la référence Process (même s'il existe une propriété Arguments sur le processus StartInfo). Vous devez utiliser le ManagementObjectSearcher comme ceci:

//Call this extension on the mshta.exe process to get the path of the .hta file 
public static string GetCommandLine(this Process process) { 
    var commandLine = new StringBuilder(process.MainModule.FileName); 

    commandLine.Append(" "); 
    using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT CommandLine FROM Win32_Process WHERE ProcessId = " + process.Id)) { 
     foreach (var commandLinePart in searcher.Get()) { 
      commandLine.Append(commandLinePart["CommandLine"]); 
      commandLine.Append(" "); 
     } 
    } 

    return commandLine.ToString(); 
}