资源描述
用installshield打包项目 收藏
InstallShield X WebForm安装
为了安装WebForm程序,在新建项目中我们需要选择Web project。选择此类型的好处是新建完成的项目中会有目标计算机的IIS根目录。这样我们就可以将Web内容安装到IIS的根目录中去。当然也可以安装到其他目录中,然后将虚拟目录指向安装目录。
新建完成项目后,Installshield会进入Project Assistant界面,这是从DevStudio 9开始出现的安装助手,它将一些最常用的操作按照“上一步”、“下一步”的方式组织成为一个向导,你可以利用此向导快速的完成安装程序制作的全过程。不过此方式过于简单,如果你想进行复杂一些的操作就做不到了。所以,我建议那些需要制作专业的安装程序的朋友们还是使用Installation Designer方式来制作安装程序,所以Project Assistant方式我就不再废话了。直接进入Installation Designer。
Installation Desioner的界面:
Installation Information:
此部分为安装程序所需的信息设置部分,包括项目的名称、类型、作者、安装程序语言;产品的名称、作者、公司、公司URL、安装路径等等一些信息。在这里需要详细的说一下关于语言和String Tables的相关问题。如果你的程序本身支持多语言,又希望你的安装程序支持多语言(即在安装程序运行后弹出一个语言选择对话框,安装者选择不同的语言后正式的安装界面的语言均为刚才选择的语言,现在很多程序都是这样子了),那么在Setup Languages项目中就把你需要的语言选中。InstallShield X相比InstallShield DevStudio有了一个方便的地方,在DevStudio中,你只能再购买东方和西方语言包才能具有多种语言支持的特性,不然只能使用两种语言。由于InstallShield X是英文软件,所以其默认的语言是English,这个可以在String Tables部分改过来,在你需要设为默认的语言上点右键 ,然后Make Default。
需要注意的是,在你输入信息时,汉字可能显示为??,这是因为语言的问题,如果你不需要多语言支持,那么直接将Chinese(S)设为默认,然后将其他的都去除,那么这些??就正常了。
Tip:
我们在制作专业的安装程序时总希望所有的界面不要出现其他无关的文字,比如下图:如果你按照正常的步骤那么所有窗口的Title和Subject、内容中都会有InstallShield Wizard的文字,如果你想把这个改成其他文字,我就改成了“安装向导”。
改动可以通过修改安装所用语言的String Table来修改这些文字。如果你一个一个的去修改表格中的文字,那么将会很麻烦,工作量也太大,呵呵,因为“InstallShield”太多了。这时候使用Export String Table将所有的字符对导出成为.txt文件,然后就可以使用UltraEdit、EditPlus之类的文本编辑软件来进行全文查找替换,这样想InstallShield Wizard就可以全部替换成为你希望的文字,然后再将替换完成后的txt使用Import String Table导入进来。
Organization是IS X中负责安装内容组织的部分(纯属废话,:-))。
下面有三个子项目,Setup Design,Features,Components。Features是所有的安装子项目,并没有该子项目下的文件和文件的相关设置;Components是所有的文件(组件),它只是将整个安装项目中所有的文件按照目录顺序进行罗列和管理,Setup Design则是集成了Features和Components两部分功能,它是按照Features的组织结构来罗列和管理某个Feature下的所有Components。
在这里,我们可以添加新的Features,Features就是安装中可以选择不同的安装部分,比如Whidbey中的64位支持的Feature我就没有装,呵呵。不过我做过的安装项目都是缺一不可的,所以也没有分过,只有一个Default的feature,所有的都装在Default下面,连界面上的选择自定义安装方式的界面都跳过去了,也许是偶的项目太小了。Features是可以树状组织的,只要你的代码作的好,你可以尽量去分。
Components的含义:一般的文件(.aspx和CSS、图像等等文件)是一个目录作为一个Component,有一个全局Component(默认名称为AllOtherFiles),然后每个有文件的目录就是一个Component;而每一个EXE和DLL是作为一个独立的Component的。这样的好处是:我们一般不会针对页面和图像文件做什么设置,所以将一个目录作为一个Component易于管理。
Component的设置可以在Components中进行,也可以在Setup Design中进行,
常用的Component本身设置(也可以说是我常用的,:-)):
1. Destination Permissions:权限,有时候我们的某个Web目录是上传文件所用的目录,那么该目录应该是ASPNET帐户可写的,那么最好在此Component上来设置ASPNET的权限,这样可以保证上传功能的正常。
2. Permanent:持久内容,有些内容需要卸载时继续保留在计算机上,比如使用信息、Access数据库文件等等,那么我们就可以将它的Permanent设为“Yes”。
其他的还有一些关于COM和.Net 的相关设置,这里就不再赘述了。
将Component展开后会出现如下图所示的界面:
File是该Component所包括的文件;Registry Data 是为了添加注册表信息的;Shortcuts是添加快捷方式到开始菜单和桌面;Advanced Settings则是一些高级设置,如:Application Paths是向注册表写入应用程序路径来使程序在没有改变PATH环境变量的情况下找到其所需的DLL的;Assembly是注册私有或全局的Assembly的;Com Registration是注册Com使用的,如果你的.Net程序使用了Com组件,可以从这里进行注册,即Regsvr32的作用;File Types是定义文件类型和打开方式的;Control NT Service和Install NT Service则是供安装和控制NT服务使用的,如果你的程序中包括NT服务,那么可以通过在该Exe或Dll上设置Install NT Service来安装,NT Service的各个属性均可以在这里设置。
这一部分主要的内容有两个:Files and Folders和Redistributables,Mobile Devices是IS X新增的内容,是为了安装项目中有某个手机使用的程序安装所用的,现阶段用此功能用的很少。
Files and Folders是管理本地和目标机的目录和文件所使用的,你可以拖动本地的文件到目标机的某个目录中。在这里,目标机上的一些特定的系统目录均会在这里列出来(如下图所示),如果你需要将某些文件放到IIS的根目录、System目录、桌面上等都可以轻易实现。
再添加文件夹时,可以使用动态链接方式添加,如果你在添加完成之后又向该目录中添加文件或者删除文件,那么IS在编译时会自动地修改文件列表,如果不使用动态链接的方式,如果你向此目录中添加了文件,那么将不会一起打包,如果删除了文件,IS在编译时将会报错。
Redistributables:此视图中包括本地目前所有的InstallShield Objects和第三方的Merge Modules(.msm文件)。如果你需要安装MDAC2.8、OLE DB、MSDE等等,都可以直接在这里将该组件选中,那么安装程序中将自动安装该组件。使用IS之前,我安装Web项目到Windows 2000 Server上时,由于有的Windows 2000 Server上没有MDAC2.7,而.Net 程序又需要该组件,我又需要手工安装MDAC2.7,使用了IS后,我就可以直接选中MDAC2.7,在安装程序安装时会自动侦测有无MDAC2.7,如果没有就会自动安装并重新启动,然后再继续安装。
IS X又多了若干组件,比较常用的是:JRE1.4.2和IE6,这两个都是Setup Prerequisites组件,我们不用为安装程序无法安装JRE而烦恼了(至少我以前都是采用其他方式安装的)。这些组件需要说明是在哪个Feature中使用的。
这里共有五项:快捷方式(Shortcuts)、注册表项(Registry)、ODBC Resources、INI File Changes、环境变量(Environment Variables )。
Shortcuts:这里的Shortcuts是指设置全局性的快捷方式(这些功能在Organization部分也有,只不过那里是在某一component上设置)。你可以将快捷方式添加到开始菜单(Start Menu)、发送到(Send To)和桌面(Desktop)。这里设置都比较简单,在此就不再详细说明了。
有一个设置方式需要在此说明一下:我们在安装Web服务器项目时,有时候需要添加一个访问我们Web项目的快捷方式,而不是做一个安装目录中静态页面的快捷方式。这样做的好处是我们点击快捷方式之后系统会打开一个IE窗口,URL指向http://localhost/MyWebSite。而这一功能我没有在IS的图形操作中找到,我实现的方式是:先在这里添加一个指向web目录的某一页面的快捷方式(如指向.htm或者.aspx),
然后到Additional Tools中的Direct Editor中找到Shortcut表,
修改刚刚添加的快捷方式的内容,主要修改Target和Arguments两项。将Target的内容改为[ProgramFilesFolder]Internet Explorer\IEXPLORE.EXE,即将快捷方式指向IE,
Arguments的内容改为需要访问的URL,如localhost/site/default.aspx,你也可以写成你的个人网站或者公司网站,这样可以从菜单直接访问你的主页了。
还有一个添加卸载本程序的快捷方式也是如此制作,只不过他的Target是[SystemFolder]msiexec.exe,Arguments是/x [ProductCode]。
Registry:管理注册表项使用的,这里添加的基本都是静态信息,如果要添加安装日期等动态信息,那么还是通过InstallScript来编程实现吧。
ODBC Resources:管理ODBC Drivers和DSN的,偶很少用,就不说了。
INI File Changes:大家都用.Config或者Xml了。
Environment Variables:添加环境变量用的,可能做Java程序的安装用的更多些。
这里共有三项:IIS、Component Services(Com+服务)、SQL Server服务。
IIS:这时我们制作WebForm应用程序必用的项目,IS X比IS 9(DevStudio)多了添加多个Web站点的功能,而在IS 9 之前,设置一个IIS虚拟目录要修改手工多个Direct才能实现。
在这里添加站点和虚拟目录都很简单,各种属性的设置请注意看右边的属性表,基本上所有在IIS里边设置的属性这里都可以设置。
Component Services:COM+的安装从来没用过,不说。
SQL Servers:这也是IS 新增的功能,IS X之前我都是自己做一个WinForm程序来执行安装数据库、配置Web.Config和License等工作。IS X提供了一个Database Import Wizard来将本地的某个数据库导入到IS中(其实就是导成Scirpt文件),导入过程很简单。导入的Script文件会存储在安装包中,在安装时,安装程序会帮助你安装SQL数据库。在这里你还可以设置对目标机上数据库的限制,如SQL Server的版本、是否可以安装在MSDE等。
这一部分应该属于高级功能,它不像上面几部分一样只要你清楚功能就可以很方便的完成设置。这一部分主要包括使用InstallScript编程实现所需功能和自定义某些安装设置、流程和一些特殊操作。
InstallScript:这是Installshield的脚本语言,利用InstallScript你可以完成很多的操作,从文件操作、Xml操作、注册表操作等等。InstallScript的语法与C++类似,并且提供了大量的函数,可以比较简单的完成程序编写。
编写InstallScript是从新建Script文件(.rul)开始的,我们在Script文件中建立的每一个函数都会在Custom Actions下备选,这样我们就可以很好的控制我们编写InstallScript函数的运行顺序了。
我的一小段代码,作用是写入安装时的目标机时间,作为简单的试用版时间控制用的,也没有加密,呵呵,比较粗糙:
#include "ifx.h"
export prototype regDateHWND);
function regDate(hMSI)
STRING strDate,svResult;
NUMBER nvResult;
begin
if(CreateRegistrySet ( "CompanyName" )<0) then
//MessageBox("un reg set CompanyName",1);
else
endif;
if (GetSystemInfo (DATE, nvResult, svResult) < 0) then
else
strDate = svResult;
endif;
RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
if(RegDBKeyExist ( "SOFTWARE\\CompanyName") < 0) then
RegDBSetKeyValueEx ( "SOFTWARE\\CompanyName" , "RegDate" , REGDB_STRING , strDate , 50 );
else
endif;
end;
Custom Actions:
此功能主要是将自己定制的各种功能加入Install的安装过程中,定制的功能可以是在上面编写的Installscript函数,也可以是独立运行的EXE、DLL中的某个函数、VBScript,JScript等等,可以直接添加或者使用向导(Custom Actions Wizard)添加。
添加过程中或添加结束后有很多的属性可以设置,
这些属性包括自定义功能运行的方式(是否等待运行完成自定义功能再向下执行)、运行的条件、运行失败的操作、在各个安装序列中的安装次序等,各部分请大家对照属性设置表和使用帮助来详细了解。
我在IS 9是自己写了一个WinFrom来执行Sql Server数据库安装、License输入、修改Web.Config中数据库连接串和License等工作,我添加了一个指向DataBaseSetup.exe的Custom Action,让他在结束安装前调用,这样在所有的Web程序安装结束后我就调用此EXE进行配置,配置完成退出此程序就结束整个安装。
Sequences:
此功能为设置全部动作的安装顺序,可设置的元素包括:用户界面、标准的安装动作、自定义的功能等,你可以通过Move Up、Move Down或者更改Sequence Number来调整安装顺序或者直接将某些Sequence删除。你也可以在这里加入一些自定义功能或者系统功能。
如果你需要你的安装程序完成后重新启动目标机,那么只需在Sequence的最后插入一个IS的标准工作(Standard Action)-- ScheduleReboot,此动作的功能是在安装结束时提示用户重新启动计算机。
Support Files
使用此功能,安装程序制作人员可以添加一些只有在安装过程中才会使用的文件,比如语言文件、Splash的位图文件等等。
System Searchs
在安装过程中搜索目标机系统中的文件、文件夹路经、注册表项目并以此决定系统文件夹(IIS)的位置、系统的版本等信息来确定安装中所需的某些参数。
Property Manager
在此视图中编辑属性表,很多属性都是上面的各个视图中出现的。
User Interface
此视图中可以管理所有的用户界面。Dialogs中包括系统中所有的对话框,在这里我们可以简单的更改每一个对话框中的对象的行为,更改对话框中的文字和图片,如果你在Project properties中的安装语言项目中选择了多种语言,那么每种语言对应的对话框都会列出来,就可以分别修改了。
在此我们也可以导入、导出对话框。大家要注意有一个LicenseAgreement对话框,即许可证协议对话框,在这里我们需要选择一个.rtf文件,在安装过程中rtf文件中的内容就会显示在协议文本框中。所有的正规的安装程序都需要设置此项(大家要好好的写你的License啊,呵呵)。
IS支持定制用户界面,不过在Web项目中并不支持此项,如果是安装一个WinForm程序则可以使用其它的Skin来美化你的安装程序。
Media
在此视图中定义你的安装程序的文件组织等信息。我都是使用Release Wizard,所以没用过此项目,还是Release Wizard比较方便直观。
Additional Tools
附加工具视图。
Dependency Scanners
此工具可以扫描安装项目中的执行文件和库文件,这样可以发现你的程序都需要哪些系统环境和Dll支持,这样可以保证你的程序在部署到客户计算机时尽量包括所需要的各种库,而不是要客户再去查找、安装。
MSI Debugger
MSI安装项目的调试功能,在这里你可以对于每一个自定义功能和对话框的执行进行调试。InstallScript安装项目没有此功能。
Direct Editor
在此编辑所有的MSI Tables。我们在前边设置的各种信息,如产品信息、快捷方式等等内容全部都存在MSI Tables中。
一个商业软件的安装程序都有一个序列号输入、验证的界面,有不少朋友也遇到这样的问题,其实在IS X就自带了例子项目,InstallShield X\Samples\Example Custom Password Dialog\下即为此项目(从IS 7就有),他里边验证序列号的路经比较简单,是由字符加数字方式组成序列号,而通过将数字进行简单的运算来验证序列号,虽然简单,但是也够了,毕竟就没有万无一失的防盗版方式(如果你的程序如Windows般版被盗版,那么你也是一个绝顶牛的大虾了,反而应该高兴才对,呵呵)。如果你想更复杂一些,就自己做一个有验证序列号算法的DLL(符合Com),那么就可以将此DLL加到IS中来,验证方法也就可以在Installscript中调用了。
附录资料:
Ehcache缓存配置
简介
Cache的配置很灵活,官方提供的Cache配置方式有好几种。你可以通过声明配置、在xml中配置、在程序里配置或者调用构造方法时传入不同的参数。
你可以将Cache的配置从代码中剥离出来,也可以在使用运行时配置,所谓的运行时配置无非也就是在代码中配置。以下是运行时配置的好处:
· 在同一个地方配置所有的Cache,这样很容易管理Cache的内存和磁盘消耗。
· 发布时可更改Cache配置。
· 可再安装阶段就检查出配置错误信息,而避免了运行时错误。
本文将会对ehcache.xml配置文件进行详细的阐述。在配置的时可以拷贝一个现有的ehcache.xml,如果没有请点击这里去下载。
ehcache-failsafe.xml
如果你调用了CacheManager默认构造方法去创建CacheManager的实例,此方法会到classpath中找ehcache.xml文件,否则它会到类路径下找ehcache-failsafe.xml文件。而ehcache-failsafe.xml被包含在jar包中,所有它肯定能找的到。
ehcache-failsafe.xml提供了一个非常简单的默认配置,这样可以使用户在没有创建ehcache.xml的情况下使用Ehcache。
不过这样做Ehcache会提醒用户创建一个正确的Ehcache配置。
ehcache.xml片段:
<ehcache>
<diskStore path="java.io.tmpdir"/>
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
</ehcache>
ehcache.xml和其他配置文件
在Ehcache-1.6之前的版本,只支持ASCII编码的ehcache.xml配置文件。在Ehcach-1.6之后版本中,支持UTF8编码的ehcache.xml配置文件。因为向后兼容,所有采用ASCII编码的配置文件完全没有必要转换为UTF8。
一个CacheManager必须要有一个XML配置。由于磁盘路径或是监听端口,多个CacheManager使用同一个配置文件时会出现错误。
下面是ehcache.xml具体实例以及配置指南
<ehcache xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
· CacheManager配置
DmulticastGroupPort=4446,这样可以配置监听端口。
· DiskStore配置
如果你使用的DiskStore(磁盘缓存),你必须要配置DiskStore配置项。如果不配置,Ehcache将会使用java.io.tmpdir。
diskStroe的“path”属性是用来配置磁盘缓存使用的物理路径的,Ehcache磁盘缓存使用的文件后缀名是.data和.index。
<disStore path=”java.io.tmpdir”/>
· CacheManagerEventListener配置
我们通过CacheManagerEventListenerFactory可以实例化一个CacheManagerPeerProvider,当我们从CacheManager中added和removed Cache时,将通知CacheManagerPeerProvider,这样一来,我们就可以很方面的对CacheManager中的Cache做一些统计。
注册到CacheManager的事件监听类名有: adding a Cache和removing a Cache
<cacheManagerEventListenerFacotory class=”” properties=””/>
· CacheManagerPeerProvider配置
在集群中CacheManager配置CacheManagerPeerProviderFactory创建CacheManagerPeerProvider。具体的实例如下:
<cacheManagerPeerProviderFactoryclass="net.sf.ehcache.distribution.
RMICacheManagerPeerProviderFactory"
properties="peerDiscovery=manual, rmiUrls=//server1:40000/sampleCache1|//server2:40000/sampleCache1| //server1:40000/sampleCache2|//server2:40000/sampleCache2"
propertySeparator="," />
· CacheManagerPeerListener配置
CacheManagerPeerListener配置是用来监听集群中缓存消息的分发的。
<cacheManagerPeerListenerFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
properties="hostName=fully_qualified_hostname_or_ip,
port=40001,
socketTimeoutMillis=120000"
propertySeparator="," />
· Cache配置
· name:Cache的唯一标识
· maxElementsInMemory:内存中最大缓存对象数。
· maxElementsOnDisk:磁盘中最大缓存对象数,若是0表示无穷大。
· eternal:Element是否永久有效,一但设置了,timeout将不起作用。
· overflowToDisk:配置此属性,当内存中Element数量达到maxElementsInMemory时,Ehcache将会Element写到磁盘中。
· timeToIdleSeconds:设置Element在失效前的允许闲置时间。仅当element不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
· timeToLiveSeconds:设置Element在失效前允许存活时间。最大时间介于创建时间和失效时间之间。仅当element不是永久有效时使用,默认是0.,也就是element存活时间无穷大。
· diskPersistent:是否缓存虚拟机重启期数据。(这个虚拟机是指什么虚拟机一直没看明白是什么,有高人还希望能指点一二)。
· diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
· diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
· memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。这里比较遗憾,Ehcache并没有提供一个用户定制策略的接口,仅仅支持三种指定策略,感觉做的不够理想。
· Cache Exception Handling配置
<cacheExceptionHandlerFactory class="com.example.ExampleExceptionHandlerFactory" properties="logLevel=FINE"/>
总结
这里只对通用缓存的配置做了详细的阐述,至于RMI缓存和集群缓存可以参考这里。
下面给出几个配置示例:
· Ehcache默认Cache配置
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
diskSpoolBufferSizeMB="30"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
· SampleCache1配置
简单配置,在ehcache.xml文件中有此配置,在使用Ehcache前最好将其删除掉,自己配置。
缓存名sampleCache1,内存中最多可缓存10000个Element,其中的element会在闲置5分钟或是存活10分钟之后失效。
超过10000element时,element将会输出到磁盘中,输出路径是java.io.tmpdir。
<cache name="sampleCache1"
maxElementsInMemory="10000"
maxElementsOnDisk="1000"
eternal="false"
overflowToDisk="true"
diskSpoolBufferSizeMB="20"
timeToIdleSeconds="300"
timeToLiveSeconds="600"
memoryStoreEvictionPolicy="LFU"
/>
· SampleCache2配置
Cache名为SampleCache2,内存中最多可以缓存1000个element,超出1000不能输出到磁盘中。缓存是永久有效的。
<cache name="sampleCache2"
maxElementsInMemory="1000"
eternal="true"
overflowToDisk="false"
memoryStoreEvictionPolicy="FIFO"
/>
· SampleCache3配置
Cache名为SampleCache3。可缓存到磁盘。磁盘缓存将会缓存虚拟机重启期的数据。磁盘缓存失效线程运行间隔时间是10分钟。
<cache name="sampleCache3"
maxElementsInMemory="500"
eternal="false"
overflowToDisk="true"
timeToIdleSeconds="300"
timeToLiveSeconds="600"
diskPersistent="true"
diskExpiryThreadIntervalSeconds="1"
memoryStoreEvictionPolicy="LFU"
/>
· sampleDistributedCache1配置
Cache名为sampleDistributedCache1。
<cache name="sampleDistributedCache1"
maxElementsInMemory="10"
eternal="false"
timeToIdleSeconds="100"
timeToLiveSeconds="100"
overflowToDisk="false">
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>
<bootstrapCacheLoaderFactory
class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"/>
</cache>
· sampleDistributedCache2配置
<cache name="sampleDistributedCache2"
maxElementsInMemory="10"
eternal="false"
timeToIdleSeconds="100"
timeToLiveSeconds="100"
overflowToDisk="false">
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
properties="replicateAsynchronously=false, replicatePuts=false,
replicateUpdates=true, replicateUpdatesViaCopy=true,
replicateRemovals=false"/>
</cache>
· s
展开阅读全文