문제

COM 인터페이스(COM 호출 가능 래퍼/CCW)를 노출하는 .NET 구성 요소를 사용하는 .NET 서비스 응용 프로그램에 대한 설치 프로젝트가 있습니다.대상 컴퓨터에서 구성 요소가 작동하도록 하려면 다음을 사용하여 등록해야 합니다.

regasm.exe /tlb /codebase 구성요소.dll

이 경우 typelib를 생성하는 /tlb 스위치는 필수입니다. 그렇지 않으면 해당 어셈블리에서 개체를 만들 수 없습니다.

문제는 regasm /tlb 호출로 이 어셈블리를 등록하도록 Visual Studio 2008 설치 프로젝트를 어떻게 구성할 수 있느냐는 것입니다.

도움이 되었습니까?

해결책

system.runtime.interopservices.registrationservices를 대신 사용하여 Regasm.exe에 대한 수동 호출을 잃을 수 있습니다.

[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);

RegistrationServices regsrv = new RegistrationServices();
if (!regsrv.RegisterAssembly(GetType().Assembly, AssemblyRegistrationFlags.SetCodeBase))
{
    throw new InstallException("Failed to register for COM Interop.");
}

}

[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Uninstall(IDictionary savedState)
{
base.Uninstall(savedState);

RegistrationServices regsrv = new RegistrationServices();
if (!regsrv.UnregisterAssembly(GetType().Assembly))
{
    throw new InstallException("Failed to unregister for COM Interop.");
}
}

또한 제거시 라이브러리가 등록 해제됩니다.

다른 팁

  1. 기본 프로젝트(등록하려는 클래스가 포함된 프로젝트)에서 프로젝트 파일을 마우스 오른쪽 버튼으로 클릭하고 추가/새 항목을 선택한 다음 설치 프로그램 클래스를 선택합니다.clsRegisterDll.cs와 같은 이름으로 지정하세요.
  2. 나타나는 디자이너에서 '코드 보기로 전환하려면 여기를 클릭하세요'를 클릭하거나 솔루션 탐색기에서 clsRegisterDll.cs 파일을 마우스 오른쪽 버튼으로 클릭하고 코드 보기를 선택합니다.
  3. 다음을 추가하여 Install, Commit 및 Uninstall 메서드를 재정의합니다.

    // Regasm String의 위치를 ​​가져옵니다. RegasmPath = System.Runtime.InterOpServices.RuntImeenVironment.GetRuntImedirectory () + @"regasm.exe";// dll 문자열의 위치를 ​​가져옵니다. componentpath = typeof (registerAsSembly) .Assembly.location;// 재가즘 실행
    System.Diagnostics.Process.Start(regasmPath, "/codebase /tlb \"" + componentPath + "\"");

    제거 작업에서 /codebase /tlb를 /u로 바꿉니다.

  4. 프로젝트 컴파일
  5. 설치 프로그램에서 dll을 응용 프로그램 폴더에 추가했는지 확인한 다음 설치 프로그램 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 보기/사용자 지정 작업을 선택합니다.
  6. 설치를 마우스 오른쪽 버튼으로 클릭한 다음 사용자 지정 작업 추가를 클릭합니다.
  7. 응용 프로그램 폴더를 두 번 클릭한 다음 DLL을 클릭합니다.
  8. Commit 작업에 대해서도 동일한 작업을 수행합니다.
  9. 설치 프로그램 빌드 및 테스트

시도해 볼 수 있는 실제 수업에 대한 연습은 다음에서 찾을 수 있습니다. http://leon.mvps.org/DotNet/RegasmInstaller.html

서비스에는 설치 프로그램 클래스가 있어야합니다. OnaFterInstall 이벤트에 등록하고 호출 Regasm : 경로는 Windows 디렉토리에서 계산되고 특정 .NET 버전에 연결되어야합니다.

처음에는 설치 프로그램 프로세스에서 regasm을 실행하려고 시도했습니다 (이 게시물을보기 전에). Regasm을 실행하려고 시도하고 모든 오류를 처리하는 것은 Windows 7의 높은 권한을 처리하지 않아도 문제가되었습니다.

사용 Runtime.InteropServices.RegistrationServices.RegisterAssembly 훨씬 깨끗하고 훨씬 더 나은 오류 트래핑을 제공했습니다.

Visual Studio Installer는 COM 클래스 등록 만 만들지 만 유형 라이브러리 생성 및 등록을하지는 않습니다 (이것은 무엇입니다. /tlb 전환 regasm.exe does) 기본적으로. 적어도 Visual Studio 2017에서는 DLL의 구축 후 단계에서 유형 라이브러리를 생성하기에 충분합니다. Tlbexp.exe 공익사업.

설치 프로그램 프로젝트가 확장자가있는 파일을 발견하면 .tlb 동일한 디렉토리와 설치중인 라이브러리와 동일한 이름으로 설정 프로젝트에 자동으로 포함되며 설치 중에 등록 단계를 수행합니다. 물론 .tlb 손으로 파일을 파일하고 설정 프로젝트에 포함시키고 등록 속성을 설정하십시오. vsdrfCOM).

여기에 있습니다 훌륭한 기사 C# 및 COM 인터페이스 정보 및 위의 정보는 배포라는 섹션에서 제공됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top