2012-12-10 88 views
0

我正在試圖從C#使用Process.Start致電tlbExp.exe。我通過命令字符串作爲參數,但不管是什麼味道的呢,我總是一個錯誤消息結束了:從C#調用Windows .exe#

The system cannot find the file specified 

    at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo) 
    at System.Diagnostics.Process.Start() 
    at System.Diagnostics.Process.Start(ProcessStartInfo startInfo) 
    at System.Diagnostics.Process.Start(String fileName) 

如果我嘗試在命令窗口內運行的命令字符串在調試時,它確實它應該發生什麼(由dll生成的tlb)。但是,我無法從代碼中獲取它。

string tlb; 
... 
tlb += @"C:\Program files\Microsoft SDKs\Windows\v6.0A\bin\tlbExp.exe"; 
tlb += @""""; tlb += @" """; tlb += outputDllPath; 
tlb += @""" /out:"""; tlb += outputTlbPath; tlb += @""""; 
Process.Start(tlb); 
+0

另一件事,我擔心的是,我可能需要在不同的機器,不同的體系結構上部署這部分。是否有可能使這種通用? – Jerome

+0

你的代碼在哪裏?我的猜測是「系統找不到指定的文件」:) – Liam

+0

嘗試將tlbExp.exe的路徑放在引號中。現在系統可能試圖打開一個名爲'Program'的exe文件,位於'C:\'中。也許只需創建一個Process實例並使用StartupInfo來配置它。 – Wutz

回答

2

你需要使用一個接受ProcessStartInfo對象超載:

var programPath = @"""C:\Program files\Microsoft SDKs\Windows\v6.0A\bin\tlbExp.exe"""; 
var info = new ProcessStartInfo(programPath); 
info.Arguments = string.Format("\"{0}\" /out:\"{1}\"", outputDllPath, outputTlbPath); 

Process.Start(info); 

爲了使通用的,第一行改成這樣:

var programFiles = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles); 
var programPath = string.Format("\"{0}\"", Path.Combine(programFiles, @"Microsoft SDKs\Windows\v6.0A\bin\tlbExp.exe")); 
+0

通用部分沒有幫助,exe在我的機器上是v7.0。 –

+0

@AshBurlaczenko:我理解他對x86和x64的「通用」方式的請求,請參閱他對這個問題的評論。 –

+0

是的,架構絕對是問題的一部分。但是有沒有辦法處理不同版本的Windows SDK? – Jerome