Jak prawidłowo zarejestrować COMa na systemie z 64 bitowym .NET Framework?

0

Jak widać w tym temacie: http://4programmers.net/Forum/C_i_.NET/221952-windows_2008_-_aplikacja_crashuje_zamiast_obsluzyc_wyjatek
Odkryłam, że są róznice między: C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\regasm
a: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\regasm

Na Windows Server 2008, pierwsze działa, a drugie nie działa, tj. próba wywołania CreateObject daje błąd: "Składnik ActiveX nie może utworzyć obiektu".

Ok. Ale ja bym chciała zarejestrować tą dllkę programowo. Wykorzystuję takowy kod:

public static void RegasmDll(string dllPath)
{
Assembly asm = Assembly.Load(File.ReadAllBytes(dllPath));
RegistrationServices regAsm = new RegistrationServices();
regAsm.RegisterAssembly(asm, AssemblyRegistrationFlags.SetCodeBase);
}


Niestety, po takiej rejestracji, próba wywołania CreateObject na mym COMie daje komunikat: 0x80131040.
Dopiero wywołanie regasma z Framework64 ratuje sytuację.

Jak programowo zarejestrować COMa przy pomocy tego regasma?
1
  1. sprawdzić czy program .netowy odpala się na 32- czy 64-bitowym frameworku (choćby przez sizeof(IntPtr)) i odpalić odpowiedniego regasma, albo
  2. oznaczyć DLL-kę jako x86 (a nie AnyCpu) i mieć spokój z problemem.
0

@Azarien, zrobiłam tak:

  1. Wyrejestrowanie regasmem zarówno z Framework jak i z Framework64
  2. Zmieniłam Platform target na x86 (zarówno w COMie, jaki i w instalatorze)
  3. Odpaliłam instalator z powyższym kodem
  4. Test.vbs dał całkiem nowy komunikat: "Próbowano załadować program w niepoprawnym formacie"

Regasm z Framework64 już nie działa (prawidłowo, dostaję komunikat, że nie można załadować zestawu).
Regasm z Framework działa, ALE wciąż test.vbs daje komunikat: "Próbowano załadować program w niepoprawnym formacie"

Ja się skłaniam ku rozwiązaniu, które daje święty spokój :) Niestety, czegoś tu jeszcze brakuje...

1

Próbowano załadować program w niepoprawnym formacie
To oznacza, że 64-bitowy program próbuje załadować 32-bitową bibliotekę, albo odwrotnie.

PS. rozwiązanie ostateczne: 32-bitowa wersja DLL-ki zarejestrowana pod Framework plus 64-bitowa wersja DLL-ki zarejestrowana (jeśli się da) pod Framework64.

0

Generalnie super dzięki za naprowadzenie na sedno problemu :) Obecne rozwiązanie będzie wystarczające, bo dllka będzie wykorzystywana tylko w Office x86. Nie mam pojęcia, czemu skrypt vbs się uruchamia jako 64bitowy program, ale to już nie mój problem :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1