当我尝试运行此功能时,它会在进程启动时继续崩溃。
public static void MapDestinationToSource (string destination, string source)
{
System.Diagnostics.Process proc = new System.Diagnostics.Process ();
// set the file to execute
proc.StartInfo.FileName = "mklink";
proc.StartInfo.Arguments = $"/D \"{source}\" \"{destination}\"";
// Redirect the output stream of the child process.
proc.StartInfo.UseShellExecute = true;
//proc.StartInfo.RedirectStandardOutput = true;
// start the process
proc.Start ();
// Do not wait for the child process to exit before
// reading to the end of its redirected stream.
// p.WaitForExit();
// Read the output stream first and then wait.
string output = proc.StandardOutput.ReadToEnd ();
proc.WaitForExit ();
}
例外:
System.ComponentModel.Win32Exception occurred
HResult=0x80004005
Message=The system cannot find the file specified
Source=System
StackTrace:
at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()
at GameCloud.StorageLibrary.MapDestinationToSource(String destination, String source) in D:\Development\code\sample\server\ClientAgent\ClientAgent\StorageLibrary.cs:line 130
at GameCloud.Program.Main(String[] args) in D:\Development\code\sample\server\ClientAgent\ClientAgent\Program.cs:line 135
当我在命令行上执行命令时,它可以工作。但它不在代码中。我已经设置了安全策略,以允许当前用户执行mklink命令而无需提升访问权限。
答案 0 :(得分:2)
如果您正在尝试执行可执行程序(bob.exe
),请查看下面我的罢工答案。
由于您尝试运行内置于mklink
的{{1}},因此您需要使用:
cmd
The docs州:
当UseShellExecute为true时,WorkingDirectory属性指定 可执行文件的位置。如果WorkingDirectory是空的 string,假设当前目录包含 可执行文件。
然后:
当UseShellExecute为false时,FileName属性可以是a 可执行文件的完全限定路径,或简单的可执行文件名 系统将尝试在指定的文件夹中查找 PATH环境变量。
因此,您需要将 proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.Arguments = $"/C mklink /D \"{source}\" \"{destination}\"";
设置为UseShellExecute
(以便false
用于查找可执行文件)或< / em>将PATH
设置为包含可执行文件的文件夹。