더 이상 같은 위치에 있지 않을 때 .NET 어셈블리를 등록하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/455073

문제

com interop에 등록 된 dll이 있으므로 hklm software class clsid [my guid] inprocserver32 [my 버전 번호] codebase에 등록 된 dll의 경로가 있습니다. 그러나 경로가 더 이상 정확하지 않도록 폴더 구조를 재정렬했습니다. DLL을 다시 넣지 않고 해당 DLL을 등록한 다음 등록하지 않고 파일을 다시 제거하는 방법이 있습니까?

더 이상 DLL이 없거나 다른 버전 번호가있는 경우 만 있습니까?

도움이 되었습니까?

해결책

다른 버전 번호 (일반적으로)는 중요하지 않습니다. 최신 DLL에 이전 버전에 나타나는 모든 GUID가 포함되어있는 한, 새롭게 등록되지 않습니다 (새로운 regasm, exe를 사용하여). 물론 COM Interop의 어셈블리를 다시 표시하면 필요한 레지스트리 키를 올바르게 재배치합니다.

다른 팁

내가 아는 한 - 새로운 위치에 DLL을 등록하는 것입니다.
MS 도구를 사용할 수 있습니다 Oleview.exe COM 등록을 확인하려면 올바른 위치를 가리 킵니다.

새로운 DLL을 등록하면서 우리가 직면 한 문제는 이전에 등록 된 버전에 더 낮은 버전이있을 때입니다. 당신은 레지스트리에서 이것으로 끝납니다.

HKCR\MyLib.MyClass\CLSID:(Default)=<my guid>

and 

HKCR\CLSID\<my guid>:Assembly=<string containing version number> 

and 

HKCR\CLSID\<my guid>\InprocServer32\<version number>\ ... more details

런타임이 식별 된 어셈블리를로드하려고 할 것 같아요 HKCR\CLSID\<my guid>:Assembly, 따라서 가능한 경우 해당 등록을 해제하려고합니다.

이것은 등록을 해제하는 방법에 대한 답이 아니지만 등록을 해제 할 수없는 경우 더 이상 가지고 있지 않은 버전 번호의 키를 제거하는 것이 유용한 것으로 나타 났으며 아마도 Assembly 감히 할 경우 수동으로 가치가 있습니다.

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