0

我試圖通過Visual Studio和可能的CMD卸載使用C#的程序。我做了幾次嘗試,但沒有得到任何東西。如何使用C#卸載程序?

嘗試#1:

 RegistryKey localMachine = Registry.LocalMachine; 
     string productsRoot = @"C:\Program Files(x86)\Microsoft\XML"; 
     RegistryKey products = localMachine.OpenSubKey(productsRoot); 
     string[] productFolders = products.GetSubKeyNames(); 

     foreach (string p in productFolders) 
     { 
      RegistryKey installProperties = products.OpenSubKey(p + @"\InstallProperties"); 
      if (installProperties != null) 
      { 
       string displayName = (string)installProperties.GetValue("DisplayName"); 
       if ((displayName != null) && (displayName.Contains("XML"))) 
       { 
        string uninstallCommand = (string)installProperties.GetValue("UninstallString"); 
        return uninstallCommand; 
       } 
      } 
     } 

基於:https://sites.google.com/site/msdevnote/home/programmatically-uninstall-programs-with-c

嘗試#2:基於

Process p = new Process(); 
    ProcessStartInfo info = new ProcessStartInfo(); 
    info.FileName = "cmd.exe"; 
    info.RedirectStandardInput = true; 
    info.UseShellExecute = false; 

    p.StartInfo = info; 
    p.Start(); 

    using (StreamWriter sw = p.StandardInput) 
    { 
     if (sw.BaseStream.CanWrite) 
     { 
      sw.WriteLine("wmic"); 
      sw.WriteLine("product get name"); 
      sw.WriteLine("XML" call uninstall); 
     } 
    } 

http://www.sevenforums.com/tutorials/272460-programs-uninstall-using-command-prompt-windows.htmlExecute multiple command lines with the same process using .NET

我使用Visual Studio代碼從主要我運行現在就來。謝謝你的幫助。

回答

1

你問一個Windows安裝程序標籤,所以如果我們談論的是從MSI文件安裝的產品:

嘗試1不正確,因爲Windows安裝程序不使用uninstallstring卸載產品(改變它,看看它是否有所作爲),並有更好的方法。

2使用WMI,你可以做這個工作,但它又是沒有必要的。

我打算假設您知道要卸載的產品的ProductCode,如果以後不再那麼做。所以這是一個非常好的正常的API來卸載產品,MsiConfigureProduct(),這裏也有這樣的例子:使用msiexec.exe的與產品代碼的

How to uninstall MSI using its Product Code in c#

以及方式。

如果您需要枚舉所有已安裝的產品掃描名稱或東西,然後看到:

How to get a list of installed software products?

+0

鏈接1和2有我我需要的東西! – sam