Process.Start() not starting the .exe file (works when run manually)

后端 未结 3 1444
刺人心
刺人心 2021-02-13 12:35

I have an .exe file that needs to be run after I create a file. The file is successfully created and I am using the following code to run the .exe file

相关标签:
3条回答
  • 2021-02-13 13:22
        private void Print(string pdfFileName)
        {
            string processFilename = Microsoft.Win32.Registry.LocalMachine
        .OpenSubKey("Software")
        .OpenSubKey("Microsoft")
        .OpenSubKey("Windows")
        .OpenSubKey("CurrentVersion")
        .OpenSubKey("App Paths")
        .OpenSubKey("AcroRd32.exe")
        .GetValue(string.Empty).ToString();
    
            ProcessStartInfo info = new ProcessStartInfo();
            info.Verb = "print";
            info.FileName = processFilename;
            info.Arguments = string.Format("/p /h {0}", pdfFileName);
            info.CreateNoWindow = true;
            info.WindowStyle = ProcessWindowStyle.Hidden;
            ////(It won't be hidden anyway... thanks Adobe!)
            info.UseShellExecute = false;
    
            Process p = Process.Start(info);
            p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    
            int counter = 0;
            while (!p.HasExited)
            {
                System.Threading.Thread.Sleep(1000);
                counter += 1;
    
                if (counter == 5)
                {
                    break;
                }
            }
    
            if (!p.HasExited)
            {
                p.CloseMainWindow();
                p.Kill();
            }
        }
    
    0 讨论(0)
  • Due to different working directory, you have to set your working directory properly to the path that you want your process to start.

    A sample demonstration of this can be:

    Process process = new Process()
    {
        StartInfo = new ProcessStartInfo(path, "{Arguments If Needed}")
        {
            WindowStyle = ProcessWindowStyle.Normal,
            WorkingDirectory = Path.GetDirectoryName(path)
        }
    };
    
    process.Start();
    
    0 讨论(0)
  • 2021-02-13 13:36

    You are not setting the working directory path, and unlike when starting the application through Explorer, it isn't set automatically to the location of the executable.

    Just do something like this:

    processInfo.WorkingDirectory = Path.GetDirectoryName(pathToMyExe);
    

    (assuming the input files, DLLs etc. are in that directory)

    0 讨论(0)
提交回复
热议问题