문제

관리자 권한 없이 regasm을 호출하는 해결 방법은 이미 여기에 설명되어 있습니다.

재가미 없는 COM Interop

사용자가 관리자 권한 없이 Excel VBA에서 배포하고 사용할 수 있는 COM 라이브러리를 만들려고 합니다.사람들이 Excel VBA에서 등록이 필요 없는 COM 개체를 사용하는 데 큰 성공을 거두지 못하는 것 같기 때문에 regasm 해결 방법이 마음에 들었습니다.또한 사용자가 구문 완성의 이점을 누릴 수 있도록 조기 바인딩을 원합니다.

그러나 위에 언급된 질문에서 허용되는 대답은 사용자 컴퓨터에서 어셈블리 dll을 어디에 배치해야 하는지 설명하지 않습니다.GAC에 어셈블리를 설치하려면 관리자 권한이 필요하므로 dll 파일을 어디에 넣을 수 있는지 궁금합니다.나는 응용 프로그램의 디렉토리가 참조된 DLL을 검색하고 있다고 가정하지만 다시 관리자 권한 없이는 Excel의 디렉토리에 내 DLL을 넣을 수 없습니다.Excel 클라이언트에서 해결 방법을 사용할 수 있습니까?먼저 배포하기 위한 관리자 권한 없이 VBA에서 COM 개체를 호출할 수 있는 다른 방법이 있습니까?

도움이 되었습니까?

해결책

com interop

에 대한 관리 권리없이 Regasm 호출

RegistrationServices.RegisterAssembly RegOverridePredefKey API를 함께 UAC-Friendly 방식으로 HKCU 하이브 아래의 자동 등록을 구현합니다.나는 자세한 답변을 게시했습니다. 여기 .

다른 팁

예, 이제 두 가지 문제가 생겼습니다. 어디에도 둘 수 없습니다. ~해야 한다 GAC 또는 c:\program files 하위 디렉터리에 넣으세요.해당 위치에는 UAC 상승도 필요하기 때문입니다.CLR에 파일을 찾을 위치를 알려주는 데 필요한 /codebase 옵션을 사용하여 Regasm.exe를 실행하는 것을 잊었을 수도 있습니다.

사용자는 쓰기 액세스 권한이 있는 디렉터리에 DLL을 복사할 수 있는 충분한 권한이 있어야 합니다.이는 일반적으로 appdata 하위 디렉터리와 같이 c:\users\username에 있는 디렉터리입니다.사용자 이름이 다르기 때문에 .reg 파일을 각 개별 사용자에 맞게 조정해야 한다는 문제를 해결해야 합니다.그래서 CodeBase .reg 파일의 값은 각 사용자마다 변경되어야 합니다.가볍게 말하면 확장성이 좋지 않습니다.

당신이 찾은 대답은 그다지 좋은 대답이 아닙니다.유일한 솔루션은 정말 작동하는 것은 자신의 등록 기능을 작성하는 것입니다.HKLM 대신 HKCU에 레지스트리 키를 쓰는 것입니다.사용 [ComRegisterFunction] 속성..reg 파일을 통해 어떤 키를 작성해야 하는지 알 수 있습니다.그리고 Assembly.GetExecutingAssembly().Location을 사용하여 CodeBase 레지스트리 값에 무엇을 쓸지 알아냅니다.[ComUnregisterFunction]을 잊지 마세요.

적어도 정신적으로는 LAN 관리자가 이러한 사용자에게 부과한 제한 사항을 피하려고 노력하고 있다는 점을 명심하십시오.그들은 지원하는 컴퓨터에서 어떤 종류의 코드가 실행되는지 아는 데 많은 관심을 갖습니다.이로 인해 문제가 발생할 수 있습니다. 적어도 그 사람과 이야기하십시오.

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