C# 在windows XP虚拟机上使用process.start的C windows窗体应用程序

C# 在windows XP虚拟机上使用process.start的C windows窗体应用程序,c#,windows,process.start,microfocus,C#,Windows,Process.start,Microfocus,情况是这样的。我们有一个非常旧的COBOL exe,它只能在Windows XP上运行。为了运行这个exe,我们设置了一个虚拟XP机器。用户每周运行一系列BAT文件 我正在尝试编写一个在VM上运行的C Windows应用程序,然后执行COBOL exe。计划使用Process.Start调用EXE。如果我的WINDOWS C EXE与COBOL EXE在同一目录下运行,则一切正常 当我将C exe移出文件夹时,会得到一个错误的返回代码,cobol不会执行 不需要太多细节,我希望能够从文件夹外部运

情况是这样的。我们有一个非常旧的COBOL exe,它只能在Windows XP上运行。为了运行这个exe,我们设置了一个虚拟XP机器。用户每周运行一系列BAT文件

我正在尝试编写一个在VM上运行的C Windows应用程序,然后执行COBOL exe。计划使用Process.Start调用EXE。如果我的WINDOWS C EXE与COBOL EXE在同一目录下运行,则一切正常

当我将C exe移出文件夹时,会得到一个错误的返回代码,cobol不会执行

不需要太多细节,我希望能够从文件夹外部运行COBOL。原因是我们有几个地区办事处,每个办事处都有自己的文件夹,每个文件夹中都有自己的cobol exe副本。这里的目标是让用户选择每个地区办事处,然后C程序将执行每个目录中的每个程序

总之。如果我在COBOL exe所在的文件夹中运行C,它就会工作。但是如果我把C移到那个文件夹之外,它就不会

我希望这一切都有意义。以下是一些额外的细节:

在Visual Studio 2012中创建为C Windows应用程序 平台目标x86我也使用过任何CPU 目标框架.NETFramework 4 COBOL是1997年的微焦点是的,我知道。我们需要摆脱它 虚拟机是WindowsXP 如果我将exe更改为记事本,它运行正常 如果我确实从windows开始运行并粘贴以下内容:K:\AMSapp\MYTESTFOLDER\AMSBLD.exe,则运行正常

按钮单击事件的C代码注意:如果我将文件名更改为K:\AMSapp\MYTESTFOLDER\AMSBLD.exe 我得到了同样的结果。它不运行 当返回码不起作用时,消息框还会显示255。 如果将C程序移到cobol文件夹中,它将返回零

private void button1_Click(object sender, EventArgs e)
{
    try
    {

        int exitCode;


            Process process = new Process();
            process.StartInfo.FileName = @"\\SERVER23021\PRODDATA\AMSapp\MYTESTFOLDER\AMSBLD.exe";



            process.StartInfo.ErrorDialog = true;

            process.Start();
            process.WaitForExit(1000 * 60 * 5);    // Wait up to five minutes.

            exitCode = process.ExitCode;
            MessageBox.Show("My exit code = " + exitCode.ToString());

            MessageBox.Show("my path and file name: " + process.StartInfo.FileName);


    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);

    }
}

尝试将进程工作目录设置为cobol exe文件的相同路径

process.StartInfo.WorkingDirectory = System.IO.Path.GetFullPath(process.StartInfo.FileName);
我认为,应该使用ProcessStartInfo.Domain来设置域,然后在ProcessStartInfo.FileName中将路径设置为exe。ProcessStartInfo实例传递到Process.Start方法


如果你需要扮演你的电话,你可以设置用户名和密码。但您必须记住,您需要将它们作为一对提供。UseShellExecute必须设置为false,并且还必须提供WorkingDirectory。更多信息:

请尝试process.StartInfo.WorkingDirectory=Path.GetFullPathprocess.StartInfo.FileName;听起来您可能有执行权限问题。我将查看您在哪个帐户下运行这些应用程序,以及是否允许该帐户执行这两个应用程序。此外,如果您要跨越任何时间界限,您可能需要在拨打电话时查看模拟情况。>>>>这是有效的。起初,它没有使用完整的网络路径。我将其更改为K:\然后是文件路径。另外,我没有使用Path.GetFullPathprocess.StartInfo.FileName,而是硬编码了K:\Path减去实际的文件名,结果成功了。非常感谢。我的评论只是给OP一个提示。但这不是一个正确的答案。如果在设置process.StartInfo.FileName之前调用此代码,该怎么办?语法正确但逻辑错误。。所以不要复制别人的代码,自己编写一个正确的代码。应该将什么设置为ProcessStartInfo.Domain?为什么你认为它应该解决OP的问题?你为什么描述它而不是发布几行可编译/工作代码?@L.B:先看看你的评论。没有理由说这会有帮助。没有任何提示它做什么。如果你投了反对票,请不要这么虚伪。我没有粘贴任何代码,因为它在带有explain的文档中。我举例说明了应该使用什么类,这个类应该使用什么属性,在哪里传递那个类的实例。首先看你的评论是的,这是评论,不是答案。如果你把某个东西作为答案贴出来,它应该是一个答案……我现在还不能发表评论。我只能在我的回答中这样做。您应该记住,新用户不能对所有内容都发表评论
ProcessStartInfo psi = new ProcessStartInfo();
psi.Domain = @"SERVER23021";
psi.FileName = @"\PRODDATA\AMSapp\MYTESTFOLDER\AMSBLD.exe";

Process.Start(psi);