Rover12421's Blog

The End.

VS2008 自定义DialogBased Application向导<四>

第四步,怎么让别人使用你的向导

首先来手动操作一次,等下再教大家写bat,有能力的也可以自己写安装程序,或用WinRAR的自解压功能都行。

为了方便操作,可以先把向导项目拷贝到桌面。删除其中一个.user结尾的用户文件,如果你没有编译过可能没有这个文件。我的这个文件完整名称是:DialogBased Application.vcproj.ROVER124.Rover12421.user。他的命名规则是:项目名.vcproj.编译项目使用的主机名.编译项目使用的用户名.user。这个文件没用,直接删除它。
image

首先我们需要把.ico、.vsdir、.vsz 这三个扩展的文件拷贝到安装目录下的\VC\vcprojects下。我这里的全路径是:C:\Program Files\Microsoft Visual Studio 9.0\VC\vcprojects
然后在安装目录下的\VC\VCWizards中新建一个文件夹,随便怎么命名都可以,比如我这里命名为Rover12421,再把拷贝到桌面项目文件夹下的所有文件都拷贝进去。我这里拷贝的是:
C:\Program Files\Microsoft Visual Studio 9.0\VC\VCWizards\Rover12421
就这样简单的两三步就完成了。创建一个新项目试试

image

看到没。不过目前有个小小的缺点就是这个向导只能在“Visual C++”大的栏里看的到,比如我想点Win32的时候,这个项目也在里面,这不是更完美吗?
其实这个很简单,只需在某一个文件中加一句话就能实现。现在我们就来把他加到Win32项目栏里。
还是安装目录下的\VC\vcprojects,这里有几个文件夹,我们打开Win32文件夹,现在的路径是:\VC\vcprojects\Win32,这个文件夹里只有一个文件 “win32.vsdir”,还记得vsdir文件吗?用记事本打开这个文件,
..\Win32Wiz.vsz|{1B027A40-8F43-11D0-8D11-00A0C91BC942}|#1171|1|#1172|{1B027A40-8F43-11D0-8D11-00A0C91BC942}|0|4096|#1154
..\Win32Console.vsz|{1B027A40-8F43-11D0-8D11-00A0C91BC942}|#1204|1|#1205|{1B027A40-8F43-11D0-8D11-00A0C91BC942}|0|4096|#1154
我们在最后加上我们自己vsdir文件里的内容
DialogBased Application.vsz| |DialogBased Application|1|DialogBased Application. By | |6777| |DialogBased Application
先不高兴,如果就这样完成的话,并没有达到效果,我们需要在最前面加上"..\“,也就是在DialogBased Application.vsz前加上”..\“,变成
..\DialogBased Application.vsz| |DialogBased Application|1|DialogBased Application. By | |6777| |DialogBased Application
保存后,我们再新建项目看看
image
是不是有了。如果没有那就是你的内容写错了。
我前面改vsdir文件的时候,就不小心几个段给覆盖掉了,结果项目说明那就没的显示,所以在改vsdir要仔细一点点。

原来安装就是这么简单。那用BAT是不是很容易实现呢?
看下我写的BAT,是不是很简单?

copy *.ico "%VS90COMNTOOLS%..\..\VC\vcprojects\" /y
copy *.vsdir "%VS90COMNTOOLS%..\..\VC\vcprojects\" /y
copy *.vsz "%VS90COMNTOOLS%..\..\VC\vcprojects\" /y
xcopy *.* "%VS90COMNTOOLS%..\..\VC\VCWizards\Rover12421\" /y /s

如果想添加到Win32的话就添加下面这些

echo.>>"%VS90COMNTOOLS%..\..\VC\vcprojects\Win32\win32.vsdir"
type *.vsdir>temp.txt
for /f "delims=" %%i in (temp.txt) do echo ..\%%i>>"%VS90COMNTOOLS%..\..\VC\vcprojects\Win32\win32.vsdir"
del temp.txt

可能有些人看不懂,我说下。 %VS90COMNTOOLS%是一个环境变量,在CMD里用set命令可以看到(VS90COMNTOOLS=C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\)。因为没有直接指向VS安装目录的环境变量,这个变量是指向“C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\”,所以使用两个"..\“向后退到“C:\Program Files\Microsoft Visual Studio 9.0\”目录。第一段bat为什么最后一个不用copy而用xcopy呢?是因为copy没有拷贝子目录的功能,需要拷贝子目录就的使用xcopy单配“/s”参数使用。第二段中的 "echo.” 是用来写空行的,防止下面吧要添加的,追加到源文件的最后一行。使用临时文件“temp.txt”是因为,如果vsdir文件名种含有空格的话,下面这句for语句就不能正常执行。for语句中的"in()"中是不能有双引号的,如果有双引号,他指向的就是一个字符串,而非一个文件名了。for语句中的"delims=“也是必须的,因为for语句默认是以空格或TAB来划分字符串的,使用"delims="就是为了整句输出,没有分隔符。如果想做的更完美一点的话,可以再第一段里在加上一句

del "%VS90COMNTOOLS%..\..\VC\VCWizards\Rover12421\*.bat

这个就不用我来说了吧,呵呵。大家可以自己尝试制作卸载的bat,或其他方式制作安装卸载程序。

好了,到这整个自定义向导到这就讲完了。

 更新

前面说到的,在\VC\VCWizards下随便创建一个文件夹用来放我们的向导,但是我并没有说在哪设置这个路径。如果不设置这个路径,其实默认的还是使用我们原来创建向导项目的目录。

这里要说到的就是vsz文件,我们的项目是 DialogBased Application.vsz 。用VS打开或用记事本等打开,我们会看到一句

Param=“ABSOLUTE_PATH = D:\Programming\VS2008\DialogBased Application\DialogBased Application”

这就是指令我们向导目录的。这里我们先来说两个参数。

ABSOLUTE_PATH    向导文件的位置。这个是绝对路径

RELATIVE_PATH     如果未找到 ABSOLUTE_PATH,则考虑使用 RELATIVE_PATH。这是相对于 PRODUCT_INSTALLATION_DIR 的路径。对于 Visual C++,RELATIVE_PATH 是 PRODUCT_INSTALLATION_DIR\VCWizards。

这里我们就需要把ABSOLUTE_PATH换成RELATIVE_PATH,后面的路径使用相对路径,更改后如下:

Param=“RELATIVE_PATH = VCWizards\Rover12421”

vsz是改好了,其实上面还有一个错误,就是需要把所有项目文件复制到想到名称命名的文件夹下,而不是直接拷贝到VCWizards\Rover12421下。也就是需要把拷贝到VCWizards\Rover12421下文件,改成拷贝到VCWizards\Rover12421\DialogBased Application\下。安装相应的BAT也需要修改。更改后完整的BAT如下:

 
copy *.ico "%VS90COMNTOOLS%..\..\VC\vcprojects\" /y
copy *.vsdir "%VS90COMNTOOLS%..\..\VC\vcprojects\" /y
copy *.vsz "%VS90COMNTOOLS%..\..\VC\vcprojects\" /y
xcopy *.* "%VS90COMNTOOLS%..\..\VC\VCWizards\Rover12421\DialogBased Application\" /y /s
del "%VS90COMNTOOLS%..\..\VC\VCWizards\Rover12421\DialogBased Application\"*.bat
echo.>>"%VS90COMNTOOLS%..\..\VC\vcprojects\Win32\win32.vsdir"
type *.vsdir>temp.txt
for /f "delims=" %%i in (temp.txt) do echo ..\%%i>>"%VS90COMNTOOLS%..\..\VC\vcprojects\Win32\win32.vsdir"
del temp.txt
安装完毕
pause

Comments