如何在64位PC上运行的x86 office上正确注册32位插件?

时间:2014-03-12 11:40:05

标签: c# ms-word add-in x86-64 wow64

我无法在办公室注册COM .dll。

操作系统 - 64位Windows 7;
 dll的目标框架是4.0;
 Office是32位Word 2007 (x86 Word 2007
Addin设置低级键盘钩并使用以下非托管方法

    [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)表示在上面编码的相应注册表目录中创建带有Description,FriendlyName,LoadBehavior的progID文件夹
  • 输出为AddinSpy输出
  • 当目标cpu位数!= 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 但是addin有效!

    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 但是addin有效!

    6. target = x86-64,regasm = 64,registry = WOW(LM),output = BadImageFormatException

我听说Office 2007不支持所有用户(本地计算机)的注册,但它看起来像56所示。我的意思是 Word可以在LM中看到注册表WOW节点。相反,当前用户中的WOW6432节点被忽略为12。因此,Word 无法在CU中看到WOW节点。

我如何注册我的插件? 35使其有效,但`BadImageFormatException非常烦人,我想摆脱它。

0 个答案:

没有答案