2011-03-29 2 views
1

일부 VB6 COM OBJECTS를 참조하는 ASP Classic 응용 프로그램이 있습니다. 이 VB6 COM OBJECTS 중 하나는 타사 .Net DLL을 참조합니다.gacutil없이 64 비트 DLL을 등록하는 방법

타사 .Net DLL은 Windows Server 2008 R2 x64 시스템에 등록해야합니다.

내가 PowerShell을 (참조 : http://weblogs.asp.net/adweigert/archive/2008/10/31/powershell-install-gac-gacutil-for-powershell.aspx)를 사용하여 GACUTIL없이 GAC에 DLL을 등록하는 스크립트를 발견했다

을 지금은 어셈블리를 등록해야합니다. 내 로컬 개발 컴퓨터 (x86)에서 GACUTIL과 REGASM을 모두 문제없이 사용했습니다. 그러나 테스트 서버에서 DLL을 가져 오려고하면 문제가 발생합니다.

첫 번째 문제 : NO GACUTIL

내가 위에서 언급 한 스크립트를 사용하여 주변에있어 서버에서 더 GACUTIL 없다. SDK를 사용하여 설치할 수 있음을 이해하지만 환경을 "오염"시키고 싶지 않습니다.

두 번째 문제 : RegAsm을 조립에게

닷넷 프레임 워크가 DLL을 찾을 수없는 32 비트 아래 RegAsm을 찾을 수 없습니다. 오류가보고되었습니다 : "RegAsm : 오류 RA0000 : 입력 어셈블리 'C : \ Windows \ System32 \ xxxxx.dll'또는 해당 종속성 중 하나를 찾을 수 없습니다."

그래서 RegAsm의 64 비트 변형을 사용했고 효과가있었습니다.

내 관심사는 ASP classic이 32 비트 RegAsm에 의해 등록되지 않았으므로 어셈블리를 찾지 못한다는 점에서 오 염려입니다.

내 응용 프로그램을 실행합니다. 내 이벤트 로그에 "ActiveX 구성 요소가 개체를 만들 수 없습니다."오류가 발생합니다. 일반적으로 개체를 만들 수 없기 때문에 발생합니다. 즉, 개체를 호스팅하는 DLL이 올바르게 등록되지 않았다는 의미입니다.

그래서 지금하려고하는 것은 32Bit 범위에서 어셈블리를 등록 할 powershell을 사용하는 REGASM에 대한 대체 방법이 있는지 알아 보는 것입니다.

그게 가능하고 어떤 스크립트가 제대로 작동하는지 알고있는 사람이 있습니까?

답변

1

도움이되기를 바랍니다.등록을 위해 테스트 컴퓨터의 잘못된 폴더에있는 Net DLL.

Windows 64Bit OS에는 System32 및 SysWOW64 폴더가 있습니다. 내 DLL을 SysWOW64 폴더에 있어야하는 System32 폴더에 두었습니다.

RegAsm ("RegAsm : 오류 RA0000 : 입력 어셈블리 'C : \ Windows \ System32 \ xxxxx.dll'또는 해당 종속성 중 하나를 찾을 수 없습니다.)에서 오류가 발생했습니다. 그것.

기본적으로 32 비트 RegAsm은 내 DLL을 찾을 수 없지만 64 비트 RegAsm은 내 파일을 찾을 수 있으며 어셈블리를 64 비트 RegAsm에 등록하여 DLL을 64 비트 범위에 넣었습니다. 32 비트 범위에 있어야했습니다.

DLL 폼 System32를 SysWOW64로 옮겼습니다. 32 비트 RegAsm이 DLL을 찾아서 32 비트 범위 내에 등록했습니다.

이제 내 VB6 COM 개체는 .Net DLL을 찾을 수 있으며 "ActiveX 구성 요소는 개체를 만들 수 없습니다."오류가 발생하면 작동합니다.

실제로 RegAsm을 사용하지 않고도 RegAsm과 동일한 작업을 수행 할 라이브러리 나 기능을 찾지 못했습니다.

누군가이 신화적인 짐승을 발견하면이 질문에 답장하십시오. 미리 감사드립니다.

0

잘 모르겠지만 문제는 Vista에서 제공되는 UAC Virtualisation (this article can also help)의 부작용에서 비롯된 것으로 여기에서 유효합니다. 애매 모호한 점은 파일 시스템과 레지스트리의 시스템 부분이 이제 사용자 액세스로부터 보호된다는 것입니다. 그러나 오래된 (32 비트) 프로그램이 시스템을 계속 작동한다고 가정하여이 부분에 쓰는 것으로 믿게 만듭니다. 실제로 사용자의 것으로 리디렉션합니다 장소. 레지스트리에서 "HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node"를 찾아보십시오.

최근 MSI가 32 비트 라이브러리로 작성되어 64 비트 시스템에 설치하는 동안 이러한 라이브러리를 호출하면 UAC 가상화가 Wow6432Node에 내 레지스트리 키를 설치합니다. This Internet article은 문제 해결에 도움이됩니다. Orca를 사용하여 Installutillib.dll을 32 비트에서 64 비트로 바꿉니다.

는 나는 내가이 배치 된 것을 발견

JP

+0

정보를 제공해 주셔서 감사 드리며 ... 지금 당황하고 있습니다. –

+0

안녕 JP, 문제가 결국 무엇에 관해서는 더 많은 정보에 대한 내 대답을 읽어보십시오. 도움과 재미있는 독서를 가져 주셔서 감사합니다. 확실히 UAC 가상화를 염두에 두어야합니다. –

관련 문제