Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.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
C# 在此目录下执行批处理文件_C#_Batch File_Process_Processstartinfo - Fatal编程技术网

C# 在此目录下执行批处理文件

C# 在此目录下执行批处理文件,c#,batch-file,process,processstartinfo,C#,Batch File,Process,Processstartinfo,我在我的c#表单项目中使用了这段代码。我还发现exp.bat文件包含shell命令,如下所示。 但无论我做什么,它都不会在工作目录中创建.txt文件 @echo off echo "hello" > test.txt path = @"‪C:\Users\abc\Desktop\exp.bat"; startingPath = @"C:\Users\abc\Desktop\"; bool success = false; try { System.Diagnostics.Proce

我在我的c#表单项目中使用了这段代码。我还发现exp.bat文件包含shell命令,如下所示。 但无论我做什么,它都不会在工作目录中创建.txt文件

@echo off
echo "hello" > test.txt
path = @"‪C:\Users\abc\Desktop\exp.bat";
startingPath = @"C:\Users\abc\Desktop\";
bool success = false;
try
{
    System.Diagnostics.ProcessStartInfo ProcStartInfo = new 
    System.Diagnostics.ProcessStartInfo("cmd");
    ProcStartInfo.RedirectStandardOutput = true;
    ProcStartInfo.UseShellExecute = false;
    ProcStartInfo.CreateNoWindow = false;
    ProcStartInfo.RedirectStandardError = true;
    System.Diagnostics.Process MyProcess = new System.Diagnostics.Process();
    ProcStartInfo.Arguments = "/c start /wait"+path;
    ProcStartInfo.WorkingDirectory = startingPath;
    MyProcess.StartInfo = ProcStartInfo;
    success = MyProcess.Start();
    MyProcess.WaitForExit();
}
catch (Exception ex) { string s = ex.StackTrace.ToString();}
最初通过在评论中使用发布

发布与原样相同的答案,因此此问题不计入未回答问题,问题作者还在评论中确认,作者的答案是正确的,并且有帮助

我觉得有足够的背景,这里是评论作为答案

在C#代码中,使用该方法获取预定义的Windows环境变量USERPROFILE的字符串值,以在C#应用程序中动态构建exp.bat和启动目录的路径。或者最好直接获取当前用户的桌面文件夹,请参见–2月22日12:25


通过将以下命令添加到bat文件的开头,可以轻松实现这一点

 %~d0
 cd %~dp0

这样,你处理错误的方式不会显示出任何东西。您可能遇到错误(我假设“访问被拒绝”),并且您没有收到任何信息。见鬼,试着以管理员的身份运行VS。@Renato,我以管理员的身份尝试过,但没有任何改变。@Mofi,我没有机会,因为我不能改变,在真实的bat文件中排列或任何内容。使用
%USERPROFILE%\Desktop\exp.bat
而不是
C:\Users\abc\Desktop\exp.bat
引用当前用户帐户的桌面文件夹中的批处理文件
exp.bat
,而不依赖于用户帐户的名称和存储位置。请参阅Wikipedia文章about,了解预定义环境变量的列表及其说明。另外,请看一下C#code中使用该方法获取预定义Windows环境变量
USERPROFILE
的字符串值,为
exp.bat
构建路径,并在C#应用程序中动态启动目录。或者最好直接获取当前用户的桌面文件夹,请参见