我正在创建一个启动其他进程的CGI应用程序,它们必须通过shell启动,所以我不能将UseShellExecute属性设置为false(不幸的是)。 我试图通过在流程
中定义我的自定义环境变量来设置应用程序标识符 ProcessStartInfo _processStartInfo = new ProcessStartInfo();
_processStartInfo.FileName = application;
_processStartInfo.WorkingDirectory = workingdirectory;
_processStartInfo.Arguments = arguments;
_processStartInfo.EnvironmentVariables.Add("GAMERVPS_UID", uid);
_processStartInfo.CreateNoWindow = true;
_processStartInfo.UseShellExecute = true;
Process myProcess = Process.Start(_processStartInfo);
但是,当然窗口不允许这样做。有没有办法为应用程序提供自定义标识符?
没有命令行,某些应用程序在传递未知命令行参数时不起作用,其他应用程序行为不正常,但有些应用程序在传递自定义命令行参数时仍然有效。
为什么我需要这个?
我需要管理没有用于保存PID或数据库的文件的应用程序,所以这是最好的方法(恕我直言)。
然后我设计了以下代码:
public static bool IsProcessRunning(string processname, string uid = "")
{
Process[] pname = Process.GetProcessesByName(processname);
if(uid.Length > 0)
{
foreach (Process proc in pname)
{
if (proc.StartInfo.EnvironmentVariables.ContainsKey("GAMERVPS_UID"))
{
if (proc.StartInfo.EnvironmentVariables["GAMERVPS_UID"] == uid)
{
return true;
}
}
}
return false;
}
else
{
if (pname.Length == 0)
return false;
else
return true;
}
}
public static void KillProcess(string processname, string uid = "")
{
Process[] pname = Process.GetProcessesByName(processname);
if (uid.Length > 0)
{
foreach (Process proc in pname)
{
if (proc.StartInfo.EnvironmentVariables.ContainsKey("GAMERVPS_UID"))
{
if (proc.StartInfo.EnvironmentVariables["GAMERVPS_UID"] == uid)
{
proc.Kill();
}
}
}
}
else
{
foreach (Process proc in pname)
{
proc.Kill();
}
}
}
但我无法使用它。
是否有其他方法可用于唯一标识过程? (当然是通过提供自定义标识符)