如何把C#程序用哪个InstallShield 12做成安装程序

如何把C#程序用哪个InstallShield 12做成安装程序,第1张

1. 编译C#程序困没

2. 在InstallShield中创建安装包工程,将步骤1产生的2进制文件添加进运余来。

3. 在InstallShield工程中添加.NET Framework的汪悄纳Prerequisites。

4. 编译安装包。

BTW,InstallShield 12太老,最新版本是InstallShield 2012 Spring。

InstallShield 12 premier.edition.exe 安装这个。

InstallShield v12 使用说明

[b][color=black]二。Organization[/color][/b]

[b][color=#000000][/color][/b]

[b][color=#000000]2.1 Setup Design[/color][/b]

[b][color=#000000][/color][/b]

[b][color=#000000][/color][/b]

[b][color=#000000]2.2 Features[/color][/b]

[b][color=#000000][/color][/b]

[b][color=#000000]2.3 Components[/color][/b]

[b][color=#000000][/color][/b]

项目工作区窗口的Components页面用来管理安装程序的各项组件。缺省时,一个安装项目通常有程序文件,双击某个组件目录项,则在主界面的右边窗口中显示出该组件相关属性的完整列表,一般为“Dynamic File Links(动态文件链接)或Static File Links(静态文件链接)、Registry Data(注册表数据)和Shortcuts(快捷方式)”,这些属性都可以方便地进行相应的修改。

[b][color=red]2.4 Setup Types[/color][/b]

[b][color=#000000][/color][/b]

项目工作区窗口的Setup Types页面用来管理提供给用户的安装类型。缺省时,一个安装项目通常有Typical(典型)、 Compact(紧凑)和Custom(定制)共三种安装类型。双击孙碰某种安装类型,则在主界面的右边窗口中显示出该安装类型相关的组件。

在组件中,凡是文件组前面有一个带钩号(√)的图标,表示该文件组已被选入相应的安装类型中。反复双击文件组前面的图标可在"选入"和"不选"之间进行切换。

[b][color=black][/color][/b]

[b][color=black]六。Behavior and Logic[/color][/b]

[b][color=#000000][/color][/b]

[b][color=#ff0000]6.1 InstallScript[/color][/b]

[b][color=black][/color][/b] 项目工作区窗口的Scripts页面用来管理安装程序的脚本文件,在该页面中各项脚本文件均以树状列表的型式显示出来的。共有Files、Functions、Properties三个目录,每个目录项前都有一链凯清个图标,且顶层目录项前还有一个套在方框中的符号"+"。双击顶层目录项或单击最前面的"+",则直接打开并显示该目录项的所有子项,此时顶层目录项前的"+"变成"-"号;再双击顶层目录项或单击最前面的"-",则该项目的所有子项被收缩,只显示顶层目录项内容,此时顶层项目前的"-"又变成了原来的"+"号。

展开顶层目录项的所有子项,双击以.rul为扩展名的脚本文件项,则在开发环境的右边的文档窗口中显示出该脚本文件的内容。为了增强安装程序代码的可读性,脚本文件的源代码内容往往是以不同颜色来显示的,各种颜色所代表的含义如下所示:

白底黑字 一般文本

黑底白字 被选定的文本

青色底黑色字 文本的行标记

白底红字 InstallShield的函数

白底蓝字 InstallScript脚本语言的关键字

白色底品红色字 常数

白色底紫红色字 用""符号括起来的文本内容

白底绿字 注释

[b][color=#ff0000]6.2 Support Files/Billboards页面[/color][/b] [color=#000000]

[b](1) Language Independent(与语系无关)

[/b] 它允许用户为各种 *** 作系统或专门为Windows 95/98/NT *** 作系统指定相应的安装文件,这棚前样不管怎样的语系,安装程序都会根据相应的 *** 作系统来拣选相应的文件。

[color=#000000][/color]

[b](2) Billboards(安装背景画面)

[/b] 设置软件安装时的背景画面,可以是一个,也可以是多个,格式是*.bmp文件。

[color=#000000][/color]

[b](2) Splash Screen(启动画面)

[/b]

InstallShield用Setup.bmp作为安装程序的启动画面。若在不同的语系(中文、English)中放置各自的位图文件,则安装程序将根据安装环境的不同语系选用相应的Setup.bmp;若将该文件放置在Language Independent(与语系无关)目录项中,则不管 *** 作系统是何种语系,都将以此位图文件作为程序安装的启动画面。

[/color][color=#000000][b](3) 其他语系相关的文件

[/b] 它允许用户为各种 *** 作系统或专门为Windows 95/98/NT *** 作系统指定相应的安装文件,这样安装程序会根据相应的语系和语系下的 *** 作系统来拣选相应的文件。

[b](4) Advanced Files(高级文件)

[/b]

在用具体的媒介发布时,允许用户在相应的媒介中放置一些非压缩文件。有三个模式:[/color]

[color=#000000] a. Disk1

b. Last Disk[/color]

[color=#000000] c. Other[/color]

不知道这个行不行?

我用的是installshield12,我先说明,installshield12做的安装程序本身,是可以设置成自动检测有没有新的版本的,嗯,我不懂怎么搞,我想了这样的办法,这样的办法可以用在installshield 6.x的版本里的

这个办法要求在做安装程序的时候,一定要先在注册表里写上程序的安装路径和机器类型

安装路径就是程序安装在什么路径下了,在installshield里是由变量TARGETDIR记录的,我在注册表里,用了install这样的健值记录

机器类型就是安装程序的机器是做什么用的,有的机器安装程序,是用来做服务器的,这个机器上面带有数据库,升级的时候,有时要升级数据库的,我选择在服务器上升级数据库,有的机器安装程序,是用来做客户端的,这个机器上面没有数据库,升级的时候,要跳过数据库升级部分

我测试了一个项目,在注册表里,我写了这样的一个注册项告游:HKEY_LOCAL_MACHINE/SOFTWARE/NNLL,在这个注册项下面,我有两个键值,一个是install,记录安装路径,一个是sc,记录机器类型

这些注册项怎么在安装程序里写进去,可以查看这篇博客:

http://blog.csdn.net/JavaProgramers/archive/2008/04/15/2293118.aspx

这里讲的是怎么利用这两个注册表键值做一个可以自动升级数据库和文件的升级程序

新键一个安装工程,设置要安装的文件,全都和普通的安装程序一样做法,不同的地方是Installation Interview这一步,这里有四个设置:

第一个Licerse Agreement Dialog,是设置要不要显示软件协议

第二个prompt users to enter their Company Name and User Name,是设置要不要用户在安装时输入公司名和用户名

第三个modify the installation location of your application,是设置可以不可以让用户选择安装路径

第四个selectively install only certain parts of your application,是设置可以不可以让用户选择安装程序里的哪部分内容

这四个东西,在升级的时候全都用不上,全部纯枣都设置袜裤销成NO

还有一个不同呢,就是因为升级程序一般都是单个文件的好,所以在Build Installation里,要选择Single Executable,这样安装包到最后就会被打包成一个单一的文件了

最后呢,就是修改安装脚本,修改OnFirstUIBefore函数,在声明变量的部分,要添加五个变量,szPath是记录安装路径的,szServer是记录机器类型的

//NNLL添加变量

string szPath,szServer

string szKey

number nType,nRootKey

//NNLL添加结束

在Dlg_SdFeatureTree后,添加下面的脚本,读取安装路径和机器类型,设置安装路径

//提取注册表,取安装路径和是否服务器端

//置根为nRootKey

nRootKey = HKEY_LOCAL_MACHINE

RegDBSetDefaultRoot (nRootKey)

//取安装路径

szKey="SOFTWARE//NNLL"

if RegDBKeyExist(szKey) = 1 then

//存在这个项,取这个项下的键值

nSize=-1

nType=REGDB_STRING

//取安装路径

szName="install"

RegDBGetKeyValueEx (szKey, szName, nType, szPath, nSize)

//取是否服务器端

szName="sc"

RegDBGetKeyValueEx (szKey, szName, nType, szServer, nSize)

//设置安装路径

TARGETDIR=szPath

else

//如果没有这个注册项,退出升级程序

MessageBox("升级程序在非法安装的程序上无效,请购买正版软件",SEVERE)

abort

endif

上面取到的szServer是机器类型,要根据这个的值,判断是不是要用升级数据库,很简单的,给Dlg_SQLServer和Dlg_ObjDialogs加上判断就行了

if szServer="S" then

//如果是服务器端的,就升级数据库

Dlg_SQLServer:

nResult = OnSQLServerInitialize( nResult )

if( nResult = BACK ) goto Dlg_SdFeatureTree

Dlg_ObjDialogs:

nResult = ShowObjWizardPages( nResult )

if (nResult = BACK) goto Dlg_SQLServer

endif

这段是判断sc,如果值是S,就是服务器机器,要升级数据库

下面我说一下升级数据库的问题,在Server Configuration->SQL Script里,添加连接,给连接添加一个sql脚本,把你的数据库要升级的东西,全都写在脚本里,就可以了

看我这一段,我在数据库里,有一个表,叫nnll_version,里面有一个build字段,是记录补丁号的,我每次升级,最少也要把这个补丁号写上,所以我的最简单升级脚本就是这个

use NNLLTABLE

declare @build varchar(20)

select @build=build from nnll_version

if ( @build<'20061117' )

begin

update nnll_version set build='20061117'

end

go

关于升级数据库脚本的设置,详细的可以看这篇博客:

http://blog.csdn.net/JavaProgramers/archive/2008/04/15/2293879.aspx

下面呢,我再说这个升级的安装程序搞好后,每个版本要怎么搞,嗯,我的意思是啊,我在20061117升级了程序,我做了一个升级程序的工程,如果我在20061217程序又要升级了,我们不用重新做一个升级程序的工程的,修改下面几项:

1、项目名称:菜单Project->Settings,在Application标签,修改Product的设置,我是这样设置的:NNLL的软件 v1 build 20061117 升级程序

2、要升级的文件:Organization->Setup Design,在这里,要重新设置对应的Component里面的Static File Links,把原来的文件去掉,换上新的文件就可以了

3、要升级的数据库脚本:Server Configuration->SQL Scripts,在这里,把你的脚本重新修改成新的

4、安装包的名字:Media->Releases,选中你的安装包,补丁文件都是单文件的好,所以呢,是SINGLE_EXE_IMAGE,选中这个,就可以修改他的属性了,修改Single Exe File Name,我是修改成:NNLL软件v1build20061117补丁.exe

5、项目名称:菜单Project->Settings,在Application标签,Product那一栏的id编号,点击Change按钮,这样第二次使用这个projcet,build出来的升级程序时,就不会叫你卸载

最后呢,就是重新生成安装包:菜单Build->Build SINGLE_EXE_IMAGE,等生成完了,你就可以在Media/SINGLE_EXE_IMAGE/Package目录下找到你的升级程序了

我说一下我的这个办法有什么不好的地方

1、我放成installshield11.5的新功能不用,自己想了一个办法,嗯,是因为我对着一堆的英文,看得很辛苦,对中文也辛苦

2、如果有坏蛋的用户,他们升级客户端机器,不升级服务器,那我的数据库就变成没有升级了,如果升级程序有动了数据库结构,那新的文件版本就对不上旧的数据库了,客户端运行的时候,肯定会报错,用户就肯定会找你的,说你的软件出错了

我想过这个的解决办法,就是要读取数据库的信息,如果数据库里面build字段是>=当前升级脚本的补丁号的,那就允许升级客户端机器,else呢,来一个

MessageBox("请先升级服务器",SEVERE)

abort

嗯,我不知道怎么在installshield的脚本里读数据库里的build的值,所以我不知道这个办法怎么搞

我想过把这个数据库的版本号写在注册表里,那就要安装程序也修改了,要再加一个注册表键值,好麻烦啊,我不要搞了,谁喜欢,谁搞

3、反安装的问题,这样子搞法,连补丁都可以反安装了,还要是反安装补丁后,是把补丁里面的文件删除的,就是说呢,如果有用户反安装了补丁,那我们的软件就变成少了几个文件了,安装程序是可以设置不可以反安装的,我现在还不懂怎么搞.


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8276768.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存