C# 正在ProcessStartInfo中运行“mklink”
我正在开发一个需要与Windows和Linux(Mono)兼容的c#程序 我正在尝试在这两个平台中创建一个符号链接,我正在使用ProcessStartInfo以使其正常工作。我还没有在Linux上尝试过,但在Windows上我使用了以下代码C# 正在ProcessStartInfo中运行“mklink”,c#,process,symlink,C#,Process,Symlink,我正在开发一个需要与Windows和Linux(Mono)兼容的c#程序 我正在尝试在这两个平台中创建一个符号链接,我正在使用ProcessStartInfo以使其正常工作。我还没有在Linux上尝试过,但在Windows上我使用了以下代码 ProcessStartInfo process = new ProcessStartInfo(); process.CreateNoWindow = true; proces
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.Win32异常:系统找不到该文件
指定的
如果我在命令提示符下运行mklink,它可以正常工作
我看过Google,它说要做一个[DllImport(“kernel32.dll”)],但这在Linux上不起作用
谢谢你能提供的帮助
mklink
是cmd.exe
程序的命令,而不是独立程序
要运行mklink
,必须使用一组适当的参数调用cmd.exe
,如下所示:
ProcessInfo = new ProcessStartInfo("cmd.exe", "/c mklink " + argumentsForMklink);
很高兴能帮助。。。请注意,当您在Linux上运行此命令时(假设您运行的是C#there),您可能不需要通过shell运行mklink(做得不多,所以不是100%确定)。我认为没有mklink命令,所以我需要为Linux运行单独的命令,即
ln-fs source target
。我先做一个检查,看看它在哪个操作系统上运行,并相应地执行命令。@Boardy:说得好ln
是一个独立的命令(我相信),因此在Linux下不需要外壳处理器。我在远程机器上通过PSEXEC\\someserver mklink…
运行mklink
时遇到问题。您的回答给了我一个关键提示,让我改用PSEXEC\\someserver cmd/c mklink…
,效果很好。