本文主要是針對做的項目遇到的問題寫的東西。
此項目是基於VS2010開發,C++編寫算法部分,界面部分爲C#,這就需要將C++的部分做成ActiveX控件,拖到C#界面中。我們知道,ActiveX控件形式基本爲.dll文件與.ocx文件。這樣的文件若想被C#調用前提是要在本地註冊。
問題是,之前師兄開發是用的WIN7 32位的,這沒有任何問題,我接管這個項目之後,我的電腦爲WIN8 64位系統,註冊.ocx問題就出現了。
1、如何在WIN8系統中註冊.ocx文件
這個比較坑,網上一般教程針對的是一個獨立的.ocx註冊。即只需要將.ocx拷貝到系統目錄C:\Windows\System32(64位)、或者是C:\Windows\SysWOW64(32位)。然後在此路徑中找到cmd.exe,以管理員的身份運行,註冊即可。
然而,很多.ocx文件不是孤立的,它還依賴很多.lib庫,如果把這些.lib文件也拷過去註冊,當然沒問題。但是每次都這樣很麻煩。所以就想可不可以不把.ocx拷貝到系統目錄直接註冊。答案可行,具體操作過程:
(1)、在C:\Windows\SysWOW64文件夾下,找到cmd.exe,右鍵以管理員身份運行。
進入.ocx所在的文件夾:
用regsvr32註冊.ocx控件
這樣就註冊成功了。
2、編寫.bat自行運行註冊.ocx。
但是這樣的結果就是,如果.ocx是你自己正在開發的,你一直在修改它,每次調試,你都得要重新手動註冊一次,相當麻煩,而且是要運行cmd命令註冊。這樣就可以轉到使用.bat自行註冊。使用.bat註冊需要編寫.bat。先建一個.txt,然後改後綴名,右鍵編輯。貼入代碼:
@echo off
cd /d %~dp0
if "%processor_architecture%"=="x86" goto REG32
if "%processor_architecture%"=="AMD64" goto REG64
:REG32
regsvr32 "Med-Image Analyzer.ocx"
goto exit
:REG64
regsvr32 "Med-Image Analyzer.ocx"
goto exit
:exit
把.bat文件放在.ocx所在目錄,好了,我們不需要每次都運行cmd註冊了,可是問題又出來,每次編譯工程都會報錯。報錯內容是:
淚崩,以我調試的經驗教訓,出現註冊失敗基本是因爲權限不夠,就是說,雖然我運行了.bat註冊,但是不是以管理員身份運行的。所以我需要再以管理員身份運行.bat才能成功。也是醉了。換句話說我還是沒有實現全自動註冊.ocx而不出現錯誤。
3、WIN8系統開機即獲得管理員權限。
既然我不是以管理員身份運行的.bat,那麼我每次編譯工程的時候如果.bat可以自動獲得管理員權限問題就可以解決了。
由此我聯想到之前師兄在WIN7 32位系統下也不需要每次手動運行.bat。網上查了相關資料。可以使WIN8系統開機獲得管理員權限。
WIN+R輸入gpedit.msc進入本地組策略管理器。
然後,計算機配置-》Windows設置-》安全設置-》本地策略-》安全選項,找到對應的“用戶賬戶控制:以管理員批准模式運行所有管理員”將其禁用,重啓計算機即可。
4、.bat獲得權限了,可能還會出現剛纔的問題,沒註冊成功,這就需要對工程屬性設置了。
找到屬性頁。在鏈接項中看到兩個選項,一個是Register out ,設爲YES,一個是Per-user Redirection.設爲NO。
5、再編譯工程,沒有錯誤,大功告成。