在ProcessStartInfo中运行`mklink`

问题描述:

我正在研究需要与Windows和Linux(Mono)兼容的c#程序。在ProcessStartInfo中运行`mklink`

我试图在两个平台中创建一个符号链接,并且我正在使用ProcessStartInfo以使其工作。我没有在Linux上尝试这样做,但尚未在Windows上我使用下面的代码

ProcessStartInfo process = new ProcessStartInfo(); 

        process.CreateNoWindow = true; 
        process.UseShellExecute = false; 
        process.FileName = "mklink"; 
        process.WindowStyle = ProcessWindowStyle.Hidden; 
        process.Arguments = "/D " + webFolder + "MyFolder" + webFolder + "MyFolder_" + version; 
        Process.Start(process); 

当我运行上面的代码,我得到

System.ComponentModel.Win32Exception:系统找不到文件 指定

如果我在命令提示符运行mklink它工作正常。

我已经看过谷歌,它说关于做一个[DllImport(“kernel32.dll”)],但这不会在Linux上工作。

感谢您提供的任何帮助。

mklinkcmd.exe程序的命令,而不是独立程序。

要运行mklink,你必须用实际一组合适的参数调用cmd.exe,像这样:

ProcessInfo = new ProcessStartInfo("cmd.exe", "/c mklink " + argumentsForMklink); 
+0

感谢您的帮助 – Boardy 2012-07-08 19:54:38

+0

很乐意帮忙......需要注意的是,当你在Linux上运行这个(假设你在那里运行C#),你可能不需要通过shell运行mklink(没有做太多的Mono,所以不能100%确定)。 – 2012-07-08 21:19:16

+0

我不认为有一个mklink命令,所以我需要为Linux运行一个单独的命令,它将是''ln -fs source target''。我正在做一个检查,看看它运行的是哪个操作系统,并相应地执行命令。 – Boardy 2012-07-09 10:29:22