Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.CMD在C#中的执行无法解释地失败_C#_Command Line_Process - Fatal编程技术网

.CMD在C#中的执行无法解释地失败

.CMD在C#中的执行无法解释地失败,c#,command-line,process,C#,Command Line,Process,我正试图从一个C#程序执行一个.cmd进程。当我在命令行中运行进程时,即 C:\Directory\Process.cmd -x 1000 -y 1000 C:\Input\input.txt 我得到了一个适当的结果(在本例中,这意味着进程将文件写入: C:\Output\output.txt 但是,当我尝试从一个简单的C#程序运行这个过程时,输出文件并没有被创建 尝试1) 尝试2) 现在,在这两种情况下,都不会抛出异常,并且会访问Process.cmd(它在shell中打印状态更新),但

我正试图从一个C#程序执行一个.cmd进程。当我在命令行中运行进程时,即

C:\Directory\Process.cmd  -x 1000 -y 1000 C:\Input\input.txt
我得到了一个适当的结果(在本例中,这意味着进程将文件写入:

C:\Output\output.txt
但是,当我尝试从一个简单的C#程序运行这个过程时,输出文件并没有被创建

尝试1)

尝试2)


现在,在这两种情况下,都不会抛出异常,并且会访问Process.cmd(它在shell中打印状态更新),但该进程不会创建任何输出文件。我试图调用Process.cmd的方式是否有问题?直接从命令行运行时,它工作正常,但尝试从C#程序调用时,它工作不正常?

文件可能正在创建,但不是您认为的位置。使用

prs.StartInfo.WorkingDirectory = "yourpath"

如果用户名和密码为空,则必须设置WorkingDirectory属性 假如如果未设置属性,则默认工作目录为 %SYSTEMROOT%\system32

如果目录已经是系统路径变量的一部分,则执行以下操作 不必在此属性中重复目录的位置

UseShellExecute时WorkingDirectory属性的行为不同 比UseShellExecute为false时为true。当UseShellExecute是 如果为true,WorkingDirectory属性指定 可执行文件。如果WorkingDirectory为空字符串,则当前 目录被理解为包含可执行文件

当UseShellExecute为false时,WorkingDirectory属性不为false 用于查找可执行文件。相反,它被 已启动,并且仅在新流程的上下文中具有意义


我在意识到路径是作为参数传入的之后删除了它,并且可能对它写入的文件使用了硬编码的路径逻辑,但是由于注释引用了它,我将取消删除,以防它仍然有帮助。

文件可能正在创建,但不是您认为的位置。使用

prs.StartInfo.WorkingDirectory = "yourpath"

如果用户名和密码为空,则必须设置WorkingDirectory属性 假如如果未设置属性,则默认工作目录为 %SYSTEMROOT%\system32

如果目录已经是系统路径变量的一部分,则执行以下操作 不必在此属性中重复目录的位置

UseShellExecute时WorkingDirectory属性的行为不同 比UseShellExecute为false时为true。当UseShellExecute是 如果为true,WorkingDirectory属性指定 可执行文件。如果WorkingDirectory为空字符串,则当前 目录被理解为包含可执行文件

当UseShellExecute为false时,WorkingDirectory属性不为false 用于查找可执行文件。相反,它被 已启动,并且仅在新流程的上下文中具有意义

我在意识到路径是作为参数传入的之后删除了它,并且可能对它写入的文件使用了硬编码的路径逻辑,但是由于注释引用了它,我将取消删除,以防它仍然有帮助。

System.Diagnostics.Process.Start("cmd.exe", @"/c C:\Directory\Process.cmd -x 1000 -y 1000 C:\Input\input.txt");
好的,“@”在逐字字符串前面加上前缀,不需要反斜杠屏蔽)

这一个

System.Diagnostics.Process.Start("cmd.exe", @"/c C:\Directory\Process.cmd -x 1000 -y 1000 C:\Input\input.txt");

好了,“@”预先输入逐字字符串,这不需要反斜杠屏蔽)

因此我终于能够掌握源代码,并意识到问题出在java代码中。。。它将项目目录解释为输出目录。谢谢你们的帮助,你们提供了一些非常有用的信息

因此,我终于能够掌握源代码,并意识到问题出在java代码中。。。它将项目目录解释为输出目录。谢谢你们的帮助,你们提供了一些非常有用的信息

你能发布process.cmd内容吗?很遗憾我不能(我没有访问权限)。我知道process.cmd调用了一个Java应用程序来处理数据并生成输出。这个过程是否需要管理员权限来执行和写入输出?您是否已检查C#程序是否以正确的权限运行?如果正在运行批处理文件,UseShellExecute是否应为true?您是否可以发布生成
Output.txt
的代码?您是否可以发布process.cmd内容?很遗憾,我无法(我没有访问权限)。我知道process.cmd调用了一个Java应用程序来处理数据并生成输出。这个过程是否需要管理员权限来执行和写入输出?您是否已检查C程序是否以正确的权限运行?如果您正在运行批处理文件,UseShellExecute是否应为true?您是否可以发布生成
Output.txt
的代码?