注冊要在dos窗口中,那麼是不是要在程序中用shellexcute執行命令行(使用方法見我的博文)。
看了很多資料,發現,shellexcute只能執行一個命令(打開文件,運行某個應用程序等)。
接著就找到寫bat文件的方法:
[css]
@echo off
regsvr32.exe E:\VC.dll
pause
路徑是絕對路徑,那麼如何獲得的呢?
找到目錄有三種方法:
[cpp]
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文件了。
[cpp]
fstream _file;
_file.open("t.bat",ios::in);
if(!_file)//如果不存在。保證首次運行的時候才注冊
{
<span style="white-space:pre"> </span>char *p;
char s[101];
p=s;
<span style="white-space:pre"> </span>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文件就要在程序中執行了。執行方法有很多種。列出兩個:
[cpp] view plaincopyprint?
ShellExecute(NULL,"open","t.bat",NULL,NULL,SW_SHOWNORMAL);//最後一個參是正常顯示窗體
system("t.bat");//方法2
這些寫好後,就可以直接注冊dll啦。
注冊dll命令:
[cpp]
Regsvr32命令是Windows中控件文件(如擴展名為DLL、OCX、CPL的文件)的注冊和反注冊工具。
命令格式
Regsvr32 [/s] [/n] [/i[:cmdline]] dllname
/u 卸載安裝的控件,卸載服務器注冊
/s 注冊成功後不顯示操作成功信息框;
/i 調用DllInstall函數並把可選參數[cmdline]傳給它,
當使用/u時用來卸載DLL;不調用DllRegisterServer,該參數必須和/i一起使用。
關於一些注冊命令(DOS窗口下):
注冊所有dll命令:
[cpp]
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1