Не мога да регистрирам COM .dll в моя офис.
ОС - 64-bit Windows 7;
Целевата рамка на dll е 4.0;
Office е 32-битов Word 2007 (x86 Word 2007)
Добавката задава ниско ниво на клавиатурата Hook и използва следните неуправляеми методи
[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 с Description,FriendlyName,LoadBehavior в подходяща директория на регистъра, която е кодирана по-горе
- Изходът е изход на AddinSpy
Когато командата target cpu bitness!=RegAsm bitness RegAsm е неуспешна, няма да показвам такива очевидни записи в моя списък.
target=32,regasm=32,регистър=WOW(CU),изход=няма изход. Word 2007 не вижда WOW-CU?
target=x86-64,regasm=64,регистър=WOW(CU),изход=няма изход. 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
Но добавката работи!target=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