C# 检查正在运行的HTA文件
我正在与一些第三方软件集成,该软件在mshta.exe中运行一个.hta文件。我的应用程序是用C写的# 我需要检测.hta文件是否已经在运行,以便在开始向其发送消息之前启动它 在过去与其他第三方的集成中,我检查了进程列表中的exe,但我认为我不能只查找mshta.exe,因为它们可能正在运行其他.hta文件 我还尝试从C# 检查正在运行的HTA文件,c#,hta,C#,Hta,我正在与一些第三方软件集成,该软件在mshta.exe中运行一个.hta文件。我的应用程序是用C写的# 我需要检测.hta文件是否已经在运行,以便在开始向其发送消息之前启动它 在过去与其他第三方的集成中,我检查了进程列表中的exe,但我认为我不能只查找mshta.exe,因为它们可能正在运行其他.hta文件 我还尝试从process.getprocesss()中获取process.MainWindowTitle,但即使mshta.exe窗口显示了一个标题,MainWindowTitle属性也是空
process.getprocesss()
中获取process.MainWindowTitle
,但即使mshta.exe窗口显示了一个标题,MainWindowTitle
属性也是空的
有人知道一种方法可以让我知道mshta.exe正在运行一个特定的hta文件吗?多亏了Teemu的评论,我发现
.hta
路径确实在命令行参数中。但是,此信息不在进程
引用中(即使进程的StartInfo
上有参数
属性)。您必须像这样使用managementobjectsearch
:
//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();
}
检查每个mshta.exe的命令行,它应该包含运行hta的路径。你能发布你的hta的源代码吗?不幸的是,它是第三方hta文件,所以我不能共享它