2012-10-19 1 views
1

내 응용 프로그램을 제거하는 방법에는 두 가지가 있습니다.제거 설정 및 프로그램 추가/제거 제거

  1. 동일한 설정을 사용합니다.
  2. 추가/제어판 우리는 우리의 설치에 특별한 제거 절차를 가지고있다

의 프로그램을 제거하고 사용자 입력을 얻기 위해 특별한 대화 상자를 시작합니다. 그런 식으로 제거는 사용자 입력에 따라 발생합니다. 그러나 문제는 "프로그램 추가/제거"를 사용하여 설치 제거 프로그램을 제거하면 특별한 제거 절차가 실행되지 않는다는 것입니다. "프로그램 추가/제거"를 통해 응용 프로그램 별 제거를 시작할 수 있습니까?

+0

프로그램 추가/제거에서 "제거"를 클릭하면 사용자 정의 된 설치 해제 대화 상자를 시작 하시겠습니까? – Sandeep

+0

@Sandeep : 수정하십시오. – ABCD

답변

1

MSI 기반 프로젝트를 사용하는 경우 제거 버튼을 누르면 수동 모드에서 제거가 실행됩니다. 따라서 UI 또는 대화 상자 시퀀스의 모든 액션은 건너 뜁니다. 이 문제를 해결하려면 일반적으로 제거 버튼을 비활성화하고 (ARPNOREMOVE 참조) 최종 사용자가 수정 버튼 (UI 표시)을 대신 선택해야합니다.

+0

+1, 답변 해 주셔서 감사합니다. UI를 가져 오기 위해 "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ {xxxx} -> UninstallString"을 변경하려고했지만 실패했습니다. MsiExce가이 문자열을 사용하여 응용 프로그램을 제거하지 않습니까? 그렇다면 UnistallString의 목적은 무엇입니까? – ABCD

+0

Nope. 여기서 UninstallString은 직접 Uninstall 키를보고 있지만 MSI에 대해서는 알지 못하는 앱과의 하위 호환성을위한 것입니다. http://stackoverflow.com/a/1826857/89999 –

+0

당신이 제안한 것은 제가 찾을 수있는 유일한 해결책입니다. 현재 우리는 설치시 수정 또는 복구 옵션을 제공하지 않습니다. 그러나 여전히 ARP 버튼은 "변경"이라고 말합니다. 버튼 표시 이름을 변경할 수 있습니까? – ABCD

0

WMI을 사용하면됩니다. 필요에 따라 제거 프로그램을 사용자 정의 할 수 있습니다. 이를 달성하려면 Win32_Product classuninstall method을 사용해야합니다.

using System; 
using System.Management; 
using System.Windows.Forms; 

namespace WMISample 
{ 
    public class CallWMIMethod 
    { 
     public static void Main() 
     { 
      try 
      { 
       ManagementObject classInstance = 
        new ManagementObject("root\\CIMV2", 
        "Win32_Product.IdentifyingNumber='{EDDE41A3-A870-4D97-A1ED-67FF62AA0552}',Name='MyServiceSetup',Version='1.0.0'", 
        null); 

       // No method in-parameters to define 


       // Execute the method and obtain the return values. 
       ManagementBaseObject outParams = 
        classInstance.InvokeMethod("Uninstall", null, null); 

       // List outParams 
       Console.WriteLine("Out parameters:"); 
       Console.WriteLine("ReturnValue: " + outParams["ReturnValue"]); 
      } 
      catch(ManagementException err) 
      { 
       MessageBox.Show("An error occurred while trying to execute the WMI method: " + err.Message); 
      } 
     } 
    } 
} 

당신은 Error Codes (Windows 바탕 화면 앱)에서 반환 값을 확인할 수 있습니다 : 다음은 로컬 컴퓨터에서 프로그램을 제거의 예입니다.