检查哪个HTA文件正在运行

时间:2017-09-08 22:43:10

标签: c# hta

我正在与使用mshta.exe内的.hta文件运行的某些第三方软件集成。我的应用程序是用C#编写的

我需要检测.hta文件是否已经运行,所以我可以在开始向它发送消息之前启动它。

通过与其他第三方的过去集成,我检查了进程列表中的exe,但我不认为我可以只查找mshta.exe,因为它们可能正在运行其他.hta文件。

我也尝试从process.MainWindowTitle抓取Process.GetProcesses(),但即使mshta.exe窗口显示标题,MainWindowTitle属性也是空白。

有没有人知道一种方法,我可以知道mshta.exe正在运行一个特定的hta文件?

1 个答案:

答案 0 :(得分:1)

感谢Teemu的评论,我发现.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();
}