Проверьте, какой файл HTA запущен

Я интегрируюсь с некоторым сторонним программным обеспечением, которое работает с файлом .hta внутри mshta.exe. Мое приложение написано на C #

Мне нужно определить, запущен ли файл .hta, чтобы я мог запустить его, прежде чем я начну отправлять ему сообщения.

При прошлой интеграции с другими третьими сторонами я проверил exe в списке процессов, но не думаю, что могу просто искать mshta.exe, потому что они могут запускать какой-то другой файл .hta.

Я также попытался получить process.MainWindowTitle из Process.GetProcesses(), но хотя в окне mshta.exe отображается заголовок, свойство MainWindowTitle пусто.

Кто-нибудь знает способ, с помощью которого я мог бы выяснить, что mshta.exe запускает определенный файл hta?


person spectacularbob    schedule 08.09.2017    source источник
comment
Проверьте командную строку каждого mshta.exe, она должна содержать путь к запущенному hta.   -  person Teemu    schedule 09.09.2017
comment
Можете ли вы опубликовать исходный код вашего HTA?   -  person Hackoo    schedule 09.09.2017
comment
К сожалению, это сторонний файл HTA, поэтому я не могу им поделиться.   -  person spectacularbob    schedule 09.09.2017


Ответы (1)


Благодаря комментарию Теему я обнаружил, что путь .hta действительно указан в аргументах командной строки. Однако этой информации нет в Process справочнике (хотя есть свойство Arguments в StartInfo процесса). Вы должны использовать ManagementObjectSearcher так:

//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();
}
person spectacularbob    schedule 10.09.2017