Как правильно зарегистрировать 32-битную надстройку в офисе x86, работающем на 64-битном ПК?

Я не могу зарегистрировать COM .dll в своем офисе.

ОС - 64-битная Windows 7;
Целевая платформа dll - 4.0;
Office - это 32-разрядный Word 2007 (x86 Word 2007)
Надстройка устанавливает низкоуровневую перехватчик клавиатуры и использует следующие неуправляемые методы

    [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern IntPtr GetModuleHandle(string lpModuleName);

    [DllImport("user32.dll", SetLastError = true)]
    private static extern bool UnhookWindowsHookEx(IntPtr hhk);

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern IntPtr SetWindowsHookEx(int idHook, HookProcedure lpfn, IntPtr hMod, uint dwThreadId);

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);  

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern IntPtr GetForegroundWindow();

Ниже показаны все комбинации, которые я пробовал. Примечания:

  • RegAsm 32 означает выполнение
    C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe "my.dll" /codebase
  • RegAsm 64 означает выполнение
    C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe "my.dll" /codebase
  • Нормальный (CU) означает
    HKEY_CURRENT_USER\Software\Microsoft\Office\Word\Addins\ProgID
  • WOW (CU) означает
    HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\Office\Word\Addins\ProgID
  • WOW (LM) означает
    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\Word\Addins\ProgID
  • Запись реестра (WOW-CU, Normal-CU и WOW-LM) означает создание папки progID с описанием, FriendlyName, LoadBehavior в соответствующем каталоге реестра, который закодирован выше.
  • Вывод - вывод AddinSpy
  • Когда разрядность целевого процессора! = RegAsm bitness Команда RegAsm завершается неудачно, я не буду показывать такие записи obvoius в моем списке.

    1. target = 32, regasm = 32, registry = WOW (CU), output = no output. Word 2007 не видит WOW-CU?

    2. target = x86-64, regasm = 64, registry = WOW (CU), output = no output. Word 2007 не видит WOW-CU?

    3. target = 32, regasm = 32, registry = Normal (CU), output = BadImageFormatException Но надстройка работает!

    4. target = x86-64, regasm = 64, registry = Normal (CU), output = Dll Path is not found.

    5. target = 32, regasm = 32, registry = WOW (LM), output = BadImageFormatException Но надстройка работает!

    6. цель = x86-64, regasm = 64, реестр = WOW (LM), вывод = BadImageFormatException

Я слышал, что Office 2007 не поддерживает регистрацию для всех пользователей (локальный компьютер), но похоже, что поддерживает, как показали 5 и 6. Я имею в виду Word может видеть узел WOW реестра в LM. Напротив, узлы WOW6432 в текущем пользователе игнорируются, как показано 1 и 2. Итак, Word не видит узел WOW в CU.

Как я могу зарегистрировать свой аддин? 3 и 5 заставляют его работать, но `BadImageFormatException так раздражает, что я хочу избавиться от него.


person Baurzhan    schedule 12.03.2014    source источник
comment
Все ваши выводы точны. Конечно, никто не может догадаться, почему исключение BadImageFormatException по-прежнему позволяет надстройке работать, это не youtube.com.   -  person Hans Passant    schedule 12.03.2014
comment
@HansPassant, я забыл дополнение к BadImageFormatException - эта сборка построена средой выполнения более новой, чем текущая загруженная среда выполнения, и не может быть загружена. Однако целевая платформа 4.0, а на моем компьютере установлена ​​4.0 Framework.   -  person Baurzhan    schedule 13.03.2014
comment
В Word уже загружена среда CLR, старая версия. Вам понадобится файл winword.exe.config, который принудительно загружает среду CLR v4.   -  person Hans Passant    schedule 13.03.2014
comment
Я не могу найти файл .config, я искал на своем компьютере, но не нашел, я пытался создать winword.exe.config рядом с WINWORD.EXE, но после такого действия Word не запускается.   -  person Baurzhan    schedule 13.03.2014