2016-03-09 98 views
0

我已經使用prep2015x64.cmd生成了一個測試插件。64位Firebreath NPAPI插件沒有在Windows註冊

prep2015x64.cmd內容下面給出

echo off & setlocal enableextensions enabledelayedexpansion 
set _FB_GEN="Visual Studio 14 Win64" 
call "%~d0%~p0\common.cmd" %* 
if %errorlevel% == 2 exit /b 1 
call "%~d0%~p0\winprep.cmd" 

插件被完全生成,並保證它是64位的,我十字DUMPBIN /集管檢查,它給出了DLL是64位

FILE HEADER VALUES 
      8664 machine (x64) 
       9 number of sections 
     56DFCDF9 time date stamp Wed Mar 9 12:47:13 2016 
       0 file pointer to symbol table 
       0 number of symbols 
       F0 size of optional header 
      2022 characteristics 
        Executable 
        Application can handle large (>2GB) addresses 
        DLL 

然後,我嘗試使用C:\ Windows \ SysWOW64中提升的命令提示符進行註冊。 我用下面的命令註冊

C:\Windows\SysWOW64> C:\Windows\SysWOW64\regsvr32.exe C:\workspace\firebreath\build\bin\TestPlugin\Release\TestPlugin.dll 

它給了我一個錯誤:

The Module "C:\workspace\firebreath\build\bin\TestPlugin\Release\TestPlugin.dll" 
may not be compatible with version of Windows that you are running. 
Check if the module is compatible with an X86(32-bit) or X64(64-bit) version of regsvr32.exe 

我使用Windows 7,64位操作系統,所以我來了什麼錯誤真糊塗這裏。它是插件的一代或其他東西。 是否有任何替代方法來獲取插件註冊。

在此先感謝。

回答

0

以下是我所做的工作。我使用的Visual Studio 2008

  1. 生成的插件使用fbgen.py
  2. 運行prep2008x64.cmd。生成文件和vcproj在此步驟中生成。在任何編輯器
  3. 打開Plugin.vcproj文件並替換/機:與X86 /機:X64
  4. 打開vcproj然後添加 「其他庫的依賴」 與「C:\ Program Files文件(x86)的\微軟的Visual Studio 9.0 \ VC \ atlmfc \ LIB \ AMD64" 。這是ATL庫所必需的。
  5. 我不確定它是否與32位庫或64位庫鏈接。所以,我明確地補充說: 「另外的相關性」 鏈接器輸入下面列表中的下列

    「C:\ Program Files文件\微軟的SDK \的Windows \ v6.0A \ LIB \ 64 \ KERNEL32.LIB」 「C:\ \ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ Lib \ x64 \ User32.lib「 」C: Program Files \ Microsoft SDK \ Windows \ v6.0A \ Lib \ x64 \ WinSpool.lib「 」C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ Lib \ x64 \ Shell32.lib「 」C:\ Program Files \ Microsoft SDK \ Windows \ v6.0A \ Lib \ x64 \ Ole32.lib「 」C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ Lib \ x64 \ OleAut32.lib「 」C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ Lib \ x64 \ Uuid.lib「 「C:\ Program Files \ Microsoft SDKs \ Windows \ v6。0A \ Lib \ x64 \ ComDlg32.lib「 」C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0 \ Lib \ x64 \ AdvAPI32.lib「 」 0A \ Lib \ x64 \ Psapi.lib「 」.... \ ActiveXCore \ Debug \ ActiveXCore.lib「 」.... \ PluginCore \ Debug \ PluginCore.lib「 」PluginAuto \ Debug \ PPL_PluginAuto.lib「 「.... \ NpapiCore \ Debug \ NpapiCore.lib」 「.... \ ScriptingCore \ Debug \ ScriptingCore.lib」 「.... \ boost \ libs \ thread \ Debug \ boost_thread.lib」 「.... \ boost \ libs \ system \ Debug \ boost_system.lib」 「C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ Lib \ x64 \ WinInet.lib」

  6. 更改「T 「從鏈接高級‘不設定ARGET機’,‘MachineX64(/ MACHINE:X64)’

  7. 內置插件
  8. 使用正常的命令提示符註冊插件(不升高命令提示符)和正常的regsvr32.exe(非特定的像C:\ Windows \ SysWOW64) C:\ Users \ Username> regsvr32.exe npPlugin.dll
  9. 嘗試使用Firefox 64位版本44.0.2,但它不起作用。我認爲這是插件的問題。但是,不,我後來從https://sourceforge.net/projects/crportable/files/下載了ChromiumPortable_43.0.2357.18.paf.exe(64位)。在44以下的鉻版本只支持npapi插件。
  10. 在chrome://標誌中安裝Chromium Portable和啓用的npapi插件,然後啓動FBControl.htm。最後它工作..... !!!
0

最有可能的問題是您使用的是32位版本的regsvr32; syswow64代表「Windows 64上的系統Windows」,換句話說,它是Windows 64位上的32位窗口。實際上(具有諷刺意味的是)您想使用c:\windows\system32\regsvr32.exe文件。

爲了安全起見,只需使用路徑中的一個,而不是指定一個特定的路徑,並且總能找到正確的路徑(除非計算機的配置已被搞亂)。如果它是一個32位DLL,64位版本將自動鏈接到32位版本,但如果它是64位DLL,則32位版本將無法工作。

+0

感謝您的回覆。我已經嘗試直接在普通cmd提示符下使用regsvr32.exe,但仍然收到相同的錯誤。有沒有什麼我必須檢查或配置在firebreath才能正常工作,因爲建立32位插件工作完全正常。只有64位插件有問題.. – TechTotie

+0

我沒有任何麻煩,但我沒有用vs2015構建,所以我不知道。如果它說模塊可能不兼容,那聽起來像是一個編譯器問題,所以我不認爲它與firebreath代碼直接相關。如果有的話可能是cmake設置不正確 – taxilian

+0

再次感謝您的回覆......我現在嘗試了一些新的東西。我用prep2008x64.cmd構建了64位firebreath插件,然後用Visual Studio 2008構建了firebreath插件。現在我可以在cmd提示符下使用正常的regsvr32註冊插件。但是當我在Mozilla Firefox(64位)上啓動FBControl.htm時,我得到「需要插件才能顯示此內容」。我無法弄清楚,現在可能是什麼問題...... – TechTotie