我正在与使用mshta.exe内的.hta文件运行的某些第三方软件集成。我的应用程序是用C#编写的
我需要检测.hta文件是否已经运行,所以我可以在开始向它发送消息之前启动它。
通过与其他第三方的过去集成,我检查了进程列表中的exe,但我不认为我可以只查找mshta.exe,因为它们可能正在运行其他.hta文件。
我也尝试从process.MainWindowTitle
抓取Process.GetProcesses()
,但即使mshta.exe窗口显示标题,MainWindowTitle
属性也是空白。
有没有人知道一种方法,我可以知道mshta.exe正在运行一个特定的hta文件?
答案 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();
}