2013-11-22 34 views
1

我試圖用「REBOOT = ReallySuppress」命令行參數在C#中卸載程序,但是Windows進程監視器(Rohitab提供的API監視器)顯示我的所需命令行參數實際上並未傳遞給msiexec.exe。我的代碼有缺陷嗎?.NET不會用命令行參數調用方法?

public static List<ManagementObject> programs;  

public void Uninstall(int index) 
{ 
    object[] args = {"REBOOT=ReallySuppress", "REMOVE=ALL"}; 
    programs[index].InvokeMethod("Uninstall", args); 
} 

... 

程序列表在代碼中的其他位置初始化並且正常工作。 API監視器顯示msiexec.exe的進程開始下列參數:

"C:\Windows\SysWOW64\\msiexec.exe" /i "C:\Users\Joel Denning\AppData\LocalLow\Sun\Java\jre1.7.0_45.msi" /qn METHOD=joff

不具備REBOOT=ReallySuppressREMOVE=ALL論點,我在通過

+1

你能解釋,爲什麼您的代碼示例是定義和inititializing'args'?你說的問題是使用命令行參數,但它們沒有在你的代碼片段中使用... – evanmcdonnal

回答

0

墊層類型是的Win32_Product。 此類的方法卸載沒有參數。 http://msdn.microsoft.com/en-us/library/aa393941(v=vs.85).aspx

因此,您的代碼在語法上似乎沒問題。

How to uninstall program without rebooting

+0

感謝您的解釋,這一個令我很沮喪。在我的情況下,我能夠通過殺死正在卸載的應用程序的所有正在運行的進程來強制不重新啓動。一旦我這樣做了,就不需要將參數傳遞給msi卸載程序,因爲MSI只在運行進程時強制重新引導。 –