当License看不到的时候~我们该怎么办
算是给自己一个警示吧~告诉自己千万不能再随便搞内核开发了~就算是搞的话也一定在虚拟机上做~刚一个网友问我他的WIN7上也出现了有关License不显示的问题,那我就算是做个记录,也算是给大家提个醒。
正题开始:
1. 首先对于WIN7,对于安装包这个内容来说,我不主张用这个平台进行开发,如果你真的喜欢WIN7,那么请安装一个虚拟机并搭建XP系统。WIN7的操作感虽然很好,而我也算是MS的忠实用户了,但是被他摧残了几千遍了,原因就在于UAC的设计问题,其实是为用户着想,但是设计的太不科学了,如果是我设计的话~肯定是在用户双击安装包的时候自动弹出一个框框来告诉用户,是否以管理员身份进行安装,如果点是就继续,如果不是就提示用户不以管理员身份安装容易出现不可抗拒的错误发生,但是话说回来,微软就是很王道,不给你任何机会,(PS:一己之见~莫怪!)
2. 对于加载License的步骤我给出以下几张图片~
这个是我工程里的License文件夹,具体放在哪里无所谓~
License内部(PS:由于我的程序支持5种不同的语言,那么自己定义了几个文件,加以区分)
里面的内容当然我不用说了~是我们的Txt文件,专门是用来存放的用户注册协议的,但是一定要记住一点,就是要所有语言的License都要用相同的名字,这样便于管理,因为我不喜欢很麻烦自己的事情,起一样名字的License对自己来说很简单直接。
// ==================================================================================================//
有了上述的准备OK,我们就可以开始搞我们自己的内容了,打开Installsheild进行内容的加载,(为了简化流程自己只是做2个不同的语言)
首先,我需要把相关的内容加载到工程里,(我的安装包是Installsheild MSI模式)
首先在Installation Designer选项卡中找到Support Files/Billboards这个选项点击进入
找到后,在右边会出现Support Files 内容,这里如果你用很多种语言进行加载的话,那么会有很多不同的选择,那OK了~把你的License加载进去就行了
OK License 加载完毕,那么就该在代码段进行修改了。
一般情况下,系统会给我们生成一些固定的函数,例如说OnBegin,OnFirstUIBefore,OnEnd等等,都是根据过程进行管理的,因为IS也算是一个脚本程序,它的很多内容都可以以C语言的形式进行学习,即面向过程的一个定性。
我们在一般的情况下,看到License都是在OnFirstUIBefore()函数中出现的,但是唯一遗憾的就是macrovision没有给我们生成默认的License内容,那么我们只能手动加载这个License内容:(Dlg_SdWelcome、Dlg_SdCustomerInformation、Dlg_SetupType 这3个内容是添加OnFirstUIBefore自动生成的,而Dlg_SdLicense是我自己添加的)
Dlg_SdWelcome:
szTitle = ""; szMsg = "";
nResult = SdWelcome(szTitle, szMsg);
if (nResult = BACK) goto Dlg_SdWelcome;
szTitle = "";
svName = "";
svCompany = "";
Dlg_SdCustomerInformation:
nResult = SdCustomerInformation(szTitle, svName, svCompany, nUser);
if (nResult = BACK) goto Dlg_SdWelcome;
Dlg_SetupType:
szTitle = ""; szMsg = ""; // -- 这里的内容被我删除了,因为我觉得这个界面一点意义都没有
Dlg_SdLicense:
szTitle =""; szOpt1 = ""; szOpt2 = "";
szLicenseFile = SUPPORTDIR ^"License.txt";
// -- SdLicense2(szTitle,szOpt1,szOpt2,szLicenseFile,bLicenseAccepted)函数原型,
第三个参数是让我们确定License的路径,那么此时我只需要加载一个License名称就可以了,
第四个参数则是让生成的按钮的默认状态,如果是TRUE的话,那么这个现实的结果默认就是“是”,反之为“否”。
// -- (下面的判断很简单,就是根据用户选择的语言种类进行不同的设置,一般情况下,国人喜欢简单,直接PASS过去了,所以可以将最后一个参数设为TRUE,外国人有可能还会看看License的提示内容,那么可以写FALSE);
if(SELECTED_LANGUAGE = 0x0804)||(SELECTED_LANGUAGE = 0x0404)then
bLicenseAccepted = TRUE;
else
bLicenseAccepted = FALSE;
endif;
nResult = SdLicense2(szTitle,szOpt1,szOpt2,szLicenseFile,bLicenseAccepted);
// -- 到此为止就可以了,附2张内容显示的结果~
看到区别了吧~哈哈
PS:隆重向大家推荐北京意畅高科软件有限公司5年时间研发的隐身侠,现在已经推出免费软件版,欢迎大家使用,主要的作用是将你的个人私密信息进行安全有效的管理,那么只有你才可以打开属于自己的保险箱。