Я не могу зарегистрировать 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 в моем списке.
target = 32, regasm = 32, registry = WOW (CU), output = no output. Word 2007 не видит WOW-CU?
target = x86-64, regasm = 64, registry = WOW (CU), output = no output. Word 2007 не видит WOW-CU?
target = 32, regasm = 32, registry = Normal (CU), output =
BadImageFormatException
Но надстройка работает!target = x86-64, regasm = 64, registry = Normal (CU), output =
Dll Path is not found
.target = 32, regasm = 32, registry = WOW (LM), output =
BadImageFormatException
Но надстройка работает!цель = x86-64, regasm = 64, реестр = WOW (LM), вывод =
BadImageFormatException
Я слышал, что Office 2007 не поддерживает регистрацию для всех пользователей (локальный компьютер), но похоже, что поддерживает, как показали 5
и 6
. Я имею в виду Word может видеть узел WOW реестра в LM. Напротив, узлы WOW6432 в текущем пользователе игнорируются, как показано 1
и 2
. Итак, Word не видит узел WOW в CU.
Как я могу зарегистрировать свой аддин? 3
и 5
заставляют его работать, но `BadImageFormatException
так раздражает, что я хочу избавиться от него.
BadImageFormatException
- эта сборка построена средой выполнения более новой, чем текущая загруженная среда выполнения, и не может быть загружена. Однако целевая платформа 4.0, а на моем компьютере установлена 4.0 Framework. - person Baurzhan   schedule 13.03.2014winword.exe.config
рядом с WINWORD.EXE, но после такого действия Word не запускается. - person Baurzhan   schedule 13.03.2014