如何在程序/进程中创建自定义标识符?

时间:2014-01-09 22:09:30

标签: c# .net windows process

我正在创建一个启动其他进程的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();
            }
        }
    }

但我无法使用它。

是否有其他方法可用于唯一标识过程? (当然是通过提供自定义标识符)

0 个答案:

没有答案