【问题标题】:C# Launch application with multiple argumentsC# 使用多个参数启动应用程序
【发布时间】:2010-08-11 07:33:25
【问题描述】:

我一直在尝试从 C# 应用程序启动应用程序,但无法正常启动。从 cmd 应用程序和参数启动一个小窗口,显示输出,然后应用程序最小化到系统托盘。

使用以下代码从 C# 应用程序启动应用程序会导致进程出现在任务管理器中,但没有其他内容,没有输出窗口,没有系统托盘图标。可能是什么问题?

    myProcess.StartInfo.FileName = ...;
    myProcess.StartInfo.Arguments = ...;
    myProcess.Start();

还尝试通过以下方式

    myProcess.StartInfo.RedirectStandardOutput = true; //tried both
    myProcess.StartInfo.UseShellExecute = false; //tried both 
    myProcess.StartInfo.CreateNoWindow = false;

使用

    Process.Start(Filename, args)

也没有工作。非常感谢有关如何解决此问题的任何帮助。

更新: 我认为问题可能是要传递给进程的多个参数

RunMode=Server;CompanyDataBase=dbname;UserName=user;PassWord=passwd;DbUserName=dbu;Server=localhost;LanguageCode=9

问候

【问题讨论】:

  • 尝试用单引号将参数括起来。

标签: c# process


【解决方案1】:

我在您的代码中没有发现任何错误。我写了一个小程序,将它的 args 打印到控制台

static void Main (string[] args)
{
     foreach (string s in args)
         Console.WriteLine(s);
     Console.Read(); // Just to see the output
}

然后我把它放在 C: 中,作为应用程序“PrintingArgs.exe”的名称,所以我写了另一个执行第一个:

Process p = new Process();
p.StartInfo.FileName = "C:\\PrintingArgs.exe";
p.StartInfo.Arguments = "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18";
p.Start();

这给了我想要的数字列表输出。调用 PrintingArgs 的应用程序在到达 p.Start() 时退出,这可以通过使用 p.WaitForExit(); 或仅使用 Console.Read(); 来避免。 我也使用了p.UseShellExecutep.CreateNoWindow。只有在这种情况下

p.UseShellExecute = false;
p.CreateNoWindow = true;

使 PrintingArgs 应用程序不显示窗口(即使我只输入 p.CreateNoWindow = true 它也会显示一个窗口)。

现在我想到,也许您以错误的方式传递参数并导致其他程序失败并立即关闭,或者您可能没有指向正确的文件。检查路径和名称,以找出您可以忽略的任何错误。 另外,使用

 Process.Start(fileName, args);

不使用您通过 StartInfo 设置的信息到您的 Process 实例中。

希望这会有所帮助, 问候

【讨论】:

    【解决方案2】:

    不确定是否有人仍在关注此内容,但这是我想出的。

    string genArgs = arg1 + " " + arg2;
    string pathToFile = "Your\Path";
    Process runProg = new Process();
    try
    {
        runProg.StartInfo.FileName = pathToFile;
        runProg.StartInfo.Arguments = genArgs;
        runProg.StartInfo.CreateNoWindow = true;
        runProg.Start();
    }
    catch (Exception ex)
    {
        MessageBox.Show("Could not start program " + ex);
    }
    

    在字符串中添加一个空格允许将两个参数传递到我想要运行的程序中。执行代码后程序运行没有问题。

    【讨论】:

      【解决方案3】:

      您是否将 ProcessWindowStyle 设置为隐藏? 这是我的代码,工作正常:

      Process p=new Process();
      p.StartInfo.FileName = filePath;//filePath of the application
      p.StartInfo.Arguments = launchArguments;
      p.StartInfo.WindowStyle = (ProcessWindowStyle)ProcessStyle;//Set it to **Normal**
      p.Start();
      

      【讨论】:

        【解决方案4】:
              System.Diagnostics.Process.Start(FileName,args);
        

        例如

             System.Diagnostics.Process.Start("iexplore.exe",Application.StartupPath+ "\\Test.xml");
        

        【讨论】:

          猜你喜欢
          • 2016-06-11
          • 2013-02-13
          • 2013-04-25
          • 1970-01-01
          • 1970-01-01
          • 2019-03-07
          • 2011-12-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多