2008-12-29 6 views
4

완전히 이해하지 못하는 부분을 수행하려고하므로 여기를 읽어야합니다.Vista 64 비트에서 C# 또는 VBS의 32 비트 COM 개체 사용 및 오류 발생 80004005

외부 액세스 용 COM API를 제공하는 32 비트 응용 프로그램 (CQG라는 전자 거래 응용 프로그램)이 있습니다. Excel, .NET (C++, VB 및 C#) 및 셸 VBScript에서이 API에 액세스하는 샘플 프로그램 및 스크립트가 있습니다. 필자는 이러한 .NET 응용 프로그램을 소스 코드 및 컴파일 된 실행 파일 (32 비트, Windows XP에서 컴파일 됨)로 사용합니다.

이제 Windows Vista Home 64 비트가 나왔습니다. Excel 예제가 제대로 작동합니다 (Excel 2003). 컴파일 된 .NET 샘플 실행 파일도 작동합니다.

.NET C# 샘플을 변환하여 Visual Studio C# Expression에서 컴파일하거나 VBScript 스크립트를 실행하려고하면 개체를 만들 때 오류 80004005가 발생합니다. 처음에는 .NET 응용 프로그램도 나에게 80040154를주었습니다. 그렇지만 C# 및 VBScript 응용 프로그램의 오류가 동일하므로 32 비트 코드가 아닌 64 비트를 생성하는 방법을 생각했습니다. 그게 지금 내가 얻은 모든 진전이야.

그리고 네, 내 VBS의 SysWOW64 폴더에서 cscript.exe/WScript의 32 비트 버전을 실행 해 보았지만 그래도 결과는 동일합니다 (80004005).

이 문제를 해결하는 방법은 무엇입니까? 거의 불가능하다고 생각할 준비가 거의 끝났지 만 Excel VBA가 작동하고 Windows XP에서 컴파일 된 .NET 실행 파일은 정상적으로 작동하므로 분개하게됩니다. 이 문제를 해결할 수있는 방법이 있어야합니다 (Windows Vista 개발자가 알고있는 비밀). 나는 어떤 도움을 주셔서 감사합니다!

PS : 나는 코드 샘플 여기에 많은 이해가되지 않는 생각하지만, 이것은 실패의 VBScript의 라인 :

Set CEL = WScript.CreateObject("CQG.CQGCEL.4.0", "CEL_") 

을 그리고 이것은 C#을 :

CQGCEL CEL = new CQGCEL(); 

업데이트 : 깜빡 물론 UAC은 꺼져 있습니다. 관리자 특권이있는 계정에서 일하고 있습니다.

또한 프로세스 모니터를 사용하여 읽은 레지스트리 키를 보려고했지만이 개체의 GUID는 모두 정상적으로 보입니다. 다른 GUID도 인식 할 수 없으므로 중요도가 높은지 아닌지 확실하지 않습니다.

이 COM 개체가 Internet Explorer를 사용하고 잘못된 것을 가져올 가능성이 있습니까 (예 : Internet Explorer 6 엔진 또는 그 대신 Internet Explorer 7)?

+0

혹시이 알아낼 했습니까? –

답변

3

64 비트 시스템에서 기억해야 할 사항이 많이 있습니다.이것들은 과거에 나를 붙잡 았던 것들입니다. .NET의 모든 CPU에 대한

  1. 건물 가 64 비트 시스템에서 64 비트로 실행 의미합니다.
  2. COM 구성 요소가 많습니다. 은 32 비트 전용 인 것 같습니다.이 코드는 이 일반화되었지만 종종 입니다. 이들을 사용하려면 응용 프로그램을 32 비트 (x86)로 빌드해야합니다.
  3. 64 비트 Windows 다른 32 비트 및 64 비트 레지스트리를 노드가 있습니다. 당신이 regedit를 64 비트를 실행하는 경우 예를 들어, HKLM \ SOFTWARE \ Wow6432Node 및 HKCU \ SOFTWARE \ Wow6432Node를 볼 수 있습니다. 이 에는 32 비트 응용 프로그램에 대한 모든 정보가 들어 있습니다.

내 제안은 32 비트 응용 프로그램으로 빌드하고 어떤 일이 발생하는지 보는 것입니다.

+0

고마워! 예, 이것이 제가 한 일입니다. C# app는 32 비트 (x86)로 제작되었습니다. 그리고 프로세스 모니터는 Wow6432Node 브랜치에서 이루어진 요청을 보여줍니다. – alexandroid

0

유용한 몇 가지 당신이 시도 할 수 :

  1. 실행 process monitor을 실패한 프로세스에 필터링 된 출력. 이상한 오류가보고되는지 확인하십시오.

  2. 마찬가지로 관리되지 않는 디버거에서 실행하고 다른 첫 번째 예외가 발생하는지 확인합니다. 또한 inproc COM dll이 프로세스에로드되는지 확인할 수 있습니다.

  3. UAC를 끄고 어떻게되는지보십시오.

+0

UAC 및 프로세스 모니터에 대해 업데이트되었습니다. – alexandroid

+0

관리되지 않는 디버거가 무엇인지 VS Express에 전혀 이해가 잘 모르겠습니다. = \ – alexandroid

1

문제는 아마 DEP이다.

난 당신과 정확히 같은 문제가 있고, CQG에서 기술 지원의 도움을 얻었다. 데이터 실행 방지는 Windows Vista & Windows 7에서 기본적으로 설정됩니다. 당신은 당신이 필요로하는 경우 메시지가 표시되지

bcdedit.exe /set {current} nx AlwaysOn 

다시 부팅하여 다시 켜 수, 관리자 권한 나중에

bcdedit.exe /set {current} nx AlwaysOff 

을 사용하여 명령 프롬프트에서 그것을 해제하지만 필요가 있습니다. 0Always off 어디 있는지 2Opt in (기본 값)이며, 1Always On입니다

wmic OS Get DataExecutionPrevention_SupportPolicy 

를 사용하여 DEP 정책을 확인할 수 있으며 3Opt Out입니다.

항상 Off로 내를 변경하고 재부팅 한 후, 나는 80004005 오류를 던지고없이 컴파일 할 수 있었다.

관련 문제