2009-08-13 21 views
0

C#でプログラムを直接アンインストールするには?C言語でプログラムを完全にアンインストールする方法

Microsoft.Win32.RegistryKey Fregistry = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(以下 "本ソフトウェア" といいます)

  .OpenSubKey("Microsoft").OpenSubKey("Windows").OpenSubKey("CurrentVersion") 
      .OpenSubKey("Installer").OpenSubKey("UserData") 
      .OpenSubKey("S-1-5-18").OpenSubKey("Products"); 
      string[] Names = Fregistry.GetSubKeyNames(); 
      string uninstall = ""; 
      string ApplicationName = "Studio V5"; 
      for (int i = 0; i < Names.Length; i++) 
      { 
       Microsoft.Win32.RegistryKey FTemp = Fregistry.OpenSubKey(Names[i]).OpenSubKey("InstallProperties"); 
       **if (FTemp.GetValue("DisplayName").ToString() == ApplicationName)** 
       { 
        object obj = FTemp.GetValue("UninstallString"); 
        if (obj == null) 
         uninstall = ""; 
        else 
         uninstall = obj.ToString(); 
        i = Names.Length; 
       } 
      } 

      System.Console.WriteLine(uninstall); 
      System.Diagnostics.Process FProcess = new System.Diagnostics.Process(); 
      string temp = "/x{" + uninstall.Split("/".ToCharArray())[1].Split("I{".ToCharArray())[2]; 
      //replacing with /x with /i would cause another popup of the application uninstall 
      FProcess.StartInfo.FileName = uninstall.Split("/".ToCharArray())[0]; 
      FProcess.StartInfo.Arguments = temp; 
      FProcess.StartInfo.UseShellExecute = false; 
      FProcess.Start(); 
      System.Console.Read(); 

私は**行のnull参照例外....のようなエラーが発生しました。

答えて

2

これは非常に厄介な方法ですが、どの場合でも動作することが保証されているかどうかは疑問です。代わりに、Windows Installer API、具体的にはMsiConfigureProductおよび/またはMsiConfigureFeatureの機能をINSTALLSTATE_ABSENTとすると、プログラムで何かをアンインストールする必要があります。

+0

* Windows Installer *を使用してインストールされていないソフトウェアでも動作しますか? – Treb

+0

この場合のWindowsインストーラはAPIであり、特定のインストーラ形式(.msiなど)ではありません。 .msi以外のインストーラーは、WI APIを使用して、インストールするすべてのコンポーネントを登録することができます(また、使用する必要があります)。もしそうでなければ、 'Microsoft \ Installer'の下にレジストリキーを書き込んでいないでしょうし、とにかく発見できません。 –

関連する問題