这是情况。
我有一个应用程序,出于所有意图和目的,我必须将其视为黑匣子。
我需要能够打开这个应用程序的多个实例,每个实例都带有一组文件。打开 this 的语法是executable.exe file1.ext file2.ext.
如果我在executable.exe没有参数的情况下运行 x 次,则新实例可以正常打开。
如果我executable.exe file1.ext随后运行,executable.exe file2.ext则第二次调用会在现有窗口中打开文件 2,而不是创建新实例。这会干扰我的其他解决方案,这就是问题所在。
我的解决方案包装了这个应用程序并对其执行各种管理操作,这是我的包装类之一:
public class myWrapper
{
public event EventHandler<IntPtr> SplashFinished;
public event EventHandler ProcessExited;
private const string aaTrendLocation = @"redacted";
//private const string aaTrendLocation = "notepad";
private readonly Process _process;
private readonly Logger _logger;
public myWrapper(string[] args, Logger logger =null)
{
_logger = logger;
_logger?.WriteLine("Intiialising new wrapper object...");
if (args == null || args.Length < 1) args = new[] {""};
ProcessStartInfo info = new ProcessStartInfo(aaTrendLocation,args.Aggregate((s,c)=>$"{s} {c}"));
_process = new Process{StartInfo = info};
}
public void Start()
{
_logger?.WriteLine("Starting process...");
_logger?.WriteLine($"Process: {_process.StartInfo.FileName} || Args: {_process.StartInfo.Arguments}");
_process.Start();
Task.Run(()=>MonitorSplash());
Task.Run(() => MonitorLifeTime());
}
在我开始提供文件参数并且这种意外的实例化行为开始之前,我的包装类都可以正常工作。
我无法修改目标应用程序,也无法访问其源代码来确定此实例化是使用互斥锁还是通过其他某些功能进行管理的。因此,我需要确定是否有办法阻止新实例看到现有实例。有人有什么建议吗?
TLDR:如何防止仅限于单个实例的应用程序确定已经有一个实例正在运行
为了澄清(在可疑评论之后),我公司的研发团队写道executable.exe,但我没有时间等待他们在这件事上的帮助(我有几天而不是几个月)并且有权做任何需要的事情来提供所需的功能(有一个我的解决方案比这个问题提到的更多)迅速。
通过一些反编译工作,我可以看到正在使用以下内容来查找现有实例。
Process[] processesByName = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName);
有什么办法可以解决创建具有不同名称的应用程序的多个副本的情况吗?我考虑过在Process运行中重命名,但显然这不可能不写内核漏洞......
ibeautiful
Helenr
相关分类