我有异常错误,找不到文件

时间:2018-05-15 04:06:41

标签: c# mklink

当我尝试运行此功能时,它会在进程启动时继续崩溃。

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命令而无需提升访问权限。

1 个答案:

答案 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设置为包含可执行文件的文件夹。