2015-12-22 105 views
-2

我想打开一个外部exe文件的参数,但它似乎,我的路径beeing被逃脱销毁。无法打开外部工具从c#

在这里的代码,也许你可以指出我的鼻子的错误。

void open_2x() 
{ 
    string var_2x_apppath = "\"%PROGRAMFILES%\\2X\\Client\\TSClient.exe\""; 
    string var_2x_parameter = " s!='"+var_ausgabe_serverip+"' a!='"+var_ausgabe_produkt+"' t!='"+var_ausgabe_ServerPort+"' d!='"+var_ausgabe_raum+"' u!='"+var_ausgabe_User+"' q!='"+var_ausgabe_PW+"' m!='"+var_ausgabe_mode+"'"; 

    MessageBox.Show(var_2x_apppath + var_2x_parameter); //for debug only 

    Process p = new Process(); 
    p.StartInfo.FileName = "cmd"; 
    p.StartInfo.UseShellExecute = false; 
    p.StartInfo.CreateNoWindow = true; 
    p.StartInfo.Arguments = "/c " + var_2x_apppath + var_2x_parameter; 
    p.Start(); 
    p.WaitForExit(); 
} 
+0

临时更改到'/ k',而不是'/ C'调用,因此它不执行后终止。然后,复制批量输出的内容 - 它应该告诉你什么是实际问题。顺便说一下,你的路径中的驱动器号在哪里? –

+0

嗨,%PROGRAMFILES%= [DriveLetter]:\ Program Files \在Windows环境中。它不应该工作吗? –

+0

啊,我明白了。它应该工作。尝试更改为'/ k'并复制错误消息。现在,我们不知道什么是不工作。 –

回答

1

获取环境变量%PROGRAMFILES%通过GetEnvironmentVariable

void open_2x() 
{ 
    var programfiles = Environment.GetEnvironmentVariable("PROGRAMFILES"); 
    string var_2x_apppath = System.IO.Path.Combine(programfiles, "2X", "Client", "TSClient.exe");  
    string var_2x_parameter = " s!='"+var_ausgabe_serverip+"' a!='"+var_ausgabe_produkt+"' t!='"+var_ausgabe_ServerPort+"' d!='"+var_ausgabe_raum+"' u!='"+var_ausgabe_User+"' q!='"+var_ausgabe_PW+"' m!='"+var_ausgabe_mode+"'"; 

    MessageBox.Show(var_2x_apppath + var_2x_parameter); //for debug only 

    Process p = new Process(); 
    p.StartInfo.FileName = "cmd"; 
    p.StartInfo.UseShellExecute = false; 
    p.StartInfo.CreateNoWindow = true; 
    p.StartInfo.Arguments = "/c " + var_2x_apppath + var_2x_parameter; 
    p.Start(); 
    p.WaitForExit(); 
} 
+0

嗨,谢谢你的努力。 有趣的是,变量programfiles指向“C:\ Program Files文件(x86)”,但我需要64位文件夹。 –

+0

如果您使用的是.NET4,您也可以尝试使用Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles),请参阅https://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx – dontbyteme

-1

你应该使用这样的事情:

string.Format("C:\\{0}\\{1}", Environment.SpecialFolder.ProgramFiles, @"2X\Client\TSClient.exe\") 

结果是: “C:\ PROGRAMFILES \ 2X \客户端\ TSClient.exe \”

+0

嗨,谢谢,但\ \也在工作。 如果我将%PROGRAMFILES%更改为C:\ Program Files,它正在工作,但我想使用Windows环境变量。 –

+0

那么你应该使用这样的东西: string.Format(“C:\\ {0} \\ {1}”,Environment.SpecialFolder.ProgramFiles,@“2X \ Client \ TSClient.exe \”) RESULT :“C:\\ ProgramFiles \\ 2X \\ Client \\ TSClient.exe \\” –

+0

我认为您可以重复使用您的代码和我的解决方案。我的解决方案只是解释你是如何工作的 –

0

当参数或命令有空格,你应该使用双引号。看看这个site。也许你的参数是用空格。