前兩天寫個程式,引用的dll首次啟動並執行時候,需要手動註冊(貌似是個activex dll)。於是想個辦法,用C++程式實現。
註冊要在dos視窗中,那麼是不是要在程式中用shellexcute執行命令列(使用方法見我的博文)。
看了很多資料,發現,shellexcute只能執行一個命令(開啟檔案,運行某個應用程式等)。
接著就找到寫bat檔案的方法:
@echo offregsvr32.exe E:\VC.dllpause
路徑是絕對路徑,那麼如何獲得的呢?
找到目錄有三種方法:
char *p; char s[101];p=s;//HMODULE hDLL = NULL;//hDLL=LoadLibrary("VC.dll");//GetModuleFileName的首參,NULL代表不報任何錯誤GetModuleFileName(NULL,p,100);//方法1得到運行程式(exe)的全路徑getcwd(p,100);//方法2,工程檔案目錄cout<<argv[0]<<endl;//方法3,(同方法1)
本程式顯然要用方法2.
接著就是寫進bat檔案了。
fstream _file;_file.open("t.bat",ios::in);if(!_file){char *p; char s[101];p=s;getcwd(p,100);string str;str="";str+="@echo off";fprintf(pfOutput, "%s\n",str.c_str());str="";str+="regsvr32.exe ";str+=p;str+="\\";str+="VC.dll";fprintf(pfOutput, "%s\n",str.c_str());str="";str+="pause";fprintf(pfOutput, "%s\n",str.c_str());fclose(pfOutput);}
寫好bat檔案就要在程式中執行了。執行方法有很多種。列出兩個:
ShellExecute(NULL,"open","t.bat",NULL,NULL,SW_SHOWNORMAL);//最後一個參是正常顯示表單system("t.bat");//方法2
這些寫好後,就可以直接註冊dll啦。
註冊dll命令:
Regsvr32命令是Windows中控制項檔案(如副檔名為DLL、OCX、CPL的檔案)的註冊和反註冊工具。命令格式 Regsvr32 [/s] [/n] [/i[:cmdline]] dllname /u 卸載安裝的控制項,卸載伺服器註冊 /s 註冊成功後不顯示操作成功資訊框; /i 調用DllInstall函數並把選擇性參數[cmdline]傳給它,當使用/u時用來卸載DLL;不調用DllRegisterServer,該參數必須和/i一起使用。
關於一些註冊命令(DOS視窗下):
註冊所有dll命令:
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1