2012-07-08 74 views
3

我正在研究需要與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上工作。

感謝您提供的任何幫助。

回答

11

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