我的应用程序在启动时检查是否有任何其他实例正在运行,如果是,则会关闭所有其他实例。为此,我尝试使用Process.GetProcessByName(“AppName”)函数,并将AppName的所有进程存储在进程[]数组中。现在我想找到当前实例的PID,这样我可以关闭我的应用程序的所有其他实例(显然它们具有相同的名称,但具有不同的PID)。但是,即使经过大量的谷歌搜索,我仍然无法找到。另外我怎样才能找到我的应用程序的一个实例的PID,我使用从AppName.exe中调用的Process.Start(“AppName.exe”)函数创建的如何在运行时使用C#获得我的应用程序的PID#
0
A
回答
0
OK,与我的其他解决方案的特定问题,请参阅以下
为了进程之间钩,你需要某种形式的IPC的。要使用EventWaitHandles之间的共享句柄的简单性,可以让每个程序监听取消标志。
public static EventWaitHAndle CancellationEvent =
new EventWaitHandle(
false,
EventResetMode.AutoReset,
"MyAppCancel");
private object lockObject = new object();
后来......
Task.Run(() =>
{
while(true)
{
CancellationEvent.WaitOne();
lock(lockObject)
if(!thisIsCalling) // static bool to prevent this program from ending itself
Environment.Exit(0);
}
}
,然后调用取消像这样
lock(lockObject)
{
thisIsCalling = true;
CancellationEvent.Set();
thisIsCalling = false;
}
+0
谢谢。它似乎工作正常。干杯。 :) – Sanyam 2014-10-19 23:05:40
0
为什么不直接检查您的当前处理?
var processes = Process.GetProcessByName("AppName");
foreach (var p in processes)
{
if (p != Process.GetCurrentProcess())
p.CloseMainWindow();
}
0
如果您有兴趣关闭应用程序的其他实例,为什么不做相反的事情并防止多个实例首先打开?使用的EventWaitHandle可正是如此做:
bool created;
var eve = new System.Threading.EventWaitHandle(
false,
EventResetMode.AutoReset,
"MyAppHandle",
out created);
if(!created)
{
eve.Set();
Environment.Exit(-1); // Always use an exit error code if you're expecting to call from the console!
}
手柄参数,在这种情况下,“MyAppHandle”,将整个系统共享,从而意味着不仅将out created
paramete放在次要instaces假的,但你可以使用eve.Set()
使句柄触发acorss应用程序。设置一个监听线程,当您尝试打开第二个实例时,这可以允许消息循环显示消息。
Task.Run(() =>
{
while(true)
{
eve.WaitOne();
// Display an error here
}
}
相关问题
- 1. 从所有正在运行的应用程序获得PID(Android)
- 2. 如何获得在c程序中使用system()启动的进程的PID
- 3. 如何在Windows中获取正在运行的应用程序的PID?
- 4. 如何获取我的应用程序运行时间?
- 5. 我如何获得应用程序运行
- 6. C程序获得CPU使用的PID及其所有子
- 7. 构建C#应用程序运行时并获得结果
- 8. 如何使用adb shell获取android应用程序的pid?
- 9. 如何获得运行我的应用程序的所有用户的列表?
- 10. 如何让我的android应用程序“用户”在运行时?
- 11. 如何获得在我的主机上运行的ASP.Net MVC应用程序?
- 12. LINUX如何获得非运行PID-s?
- 13. 如何获得与系统运行进程的PID()在C++中命令
- 14. 如何获得在C#中使用给定文件名的PID?
- 15. C#如何获得运行远程应用程序的虚拟IP
- 16. 如何在trustedinstaller帐户下运行我的“C#”应用程序?
- 17. 如何从我的应用程序运行Facebook应用程序
- 18. 使用JNI获取运行时进程的PID
- 19. 当我使用SDL运行C++程序时获取命令行
- 20. 我如何使用appcelerator运行我的Windows应用程序?
- 21. 获得在C#创建进程的PID
- 22. 如何获得rails 2.3.3应用程序在fastcgi上运行Bluehost
- 23. 如果程序使用sudo运行,我如何获得用户真正的uid?
- 24. 如何获得应用程序结束时的CUDA运行时错误摘要
- 25. 获取杀死我的应用程序的进程的PID
- 26. 如何在使用MATLAB引擎时获得matlab的PID?
- 27. 如何使用Objective-C在Mac应用程序中运行应用程序?
- 28. 获得java.lang.ClassCastException在我的应用程序
- 29. 如何在C#中启动应用程序的PID#
- 30. 我如何获得我的应用程序的所有用户
[获得在C#创建进程的PID]的可能重复(HTTP:/ /stackoverflow.com/questions/2539920/getting-a-pid-of-a-process-created-in-c-sharp) – Chris 2014-10-19 22:33:47