VS2005 制作安装程序

1.首先得有一需打包的项目,这里我就用以前的学习之笔:

2.0 接下来就要新增 安装工程(专案) :

2.1 专案生成后,界面如下:

2.2 接下来当然是要添加需打包的项目了:

      说明: 1.专案输出: 打包最核心内容, exe执行文件和配置文件之类...

           &nb sp;      2.档案: 一些辅助文件,说明书什么的,和程序运行没必然关系的文件.

               3.合并模组: 一些辅助模块,比如水晶报表...

               4.组件: 程序运行需用到的其他组件(非要打包专案生成)

 

2.3 这里为简单,需打包专案不包括其他 : 档案,模组,组件. 只需 专案输出



最小化打包,只需上图选项中Select部分.此时VS2005界面如下:


2.4 VS2005左侧选项如图:

    说明:1.标识一为打包后安装程序在桌面生成的文件的选择

            2.标识二为Windows 开始 菜单 生成文件的选择

            3.标识三为程序的安装目录下生成文件的选择

 

2.5 上三文件夹的右键菜单功能一下,展示如下:

a.这里先在 安装目录下 添加一些辅助项目

  • 一个文件夹,用于一些图片的存放
  • 一个 档案 ,msiexec.exe.主要是为卸载用.路径为:C:WINDOWSsystem32msiexec.exe
  • 创建两个主要输出 的快捷方式 ,也就是执行文件(.EXE)的快捷方式.右击 主要输出 ,点击第一功能选项生成.改为自己想要的名称,这里为 PKGModelControl.这两个快捷方式是为了桌面和 开始菜单 生成的.
  • 创建一个 msiexec.exe 的快捷方式,此快捷方式是为了 开始菜单 生成,用于卸载.

b.接下来在 程序功能表 添加辅助项目

  • 一个文件夹,存在一些程序需在开始菜单打开文件的快捷方式.这里为文件名也为:PKGModelControl
  • 从a 中 拖入一 主要输出 和 msiexec.exe 的快捷方式,改为自己喜好的名称.

c.然后在 桌面 添加辅助项目

  • 从a 中 拖入一 主要输出的快捷方式,改为自己喜好的名称.

d.对快捷方式 设置图片,快捷方式的 Icon.这个就自己设置了哦..!!

 

到这里,工作基本已经完成.可还有一项重要工作不能给忘记:

msiexec.exe 快捷方式 的Arguments属性值一定不能忘设 /x + ProductCode




其中 ProductCode 为打包专案的 ProductCode 属性. 重要:/x 和ProductCode之间不能有空格

 

以上一个标准的打包专案已经完成,但是,如果需要安装此程序的电脑,没有Dot Net环境怎么办呢,能不能把环境集成到安装包呢?答案是肯定的. 打开 打包专案 的 属性页面(右击打包专案...):

点击 必要条件 ,

  • 一为需要同时打包的元件
  • 二为元件的位置

 

然后 建置 专案.一切OK....

本文也只是简单介绍了打包的最简单实现... ,要想自定义安装的复杂功能如 注册表,安装界面,就要见

如果还要进一步自定义的话,那手动编码就OK了,当然要求比较高些.呵呵!!!!!!!

关于卸载:

我已經從MSDN中找到解藥了!

http://msdn2.microsoft.com/zh-tw/library/y63fxdw6(VS.80).aspx

http://msdn2.microsoft.com/zh-tw/library/465253cd(VS.80).aspx

http://msdn2.microsoft.com/zh-tw/library/aafz9hx4(VS.80).aspx

其實它是會比較Upgrade code及Product code當新安裝時

所以只要變更版本則product code會跟著變且需勾選RemovePreviousVersions 屬性的設定成true

,所以當重新安裝時會自動偵測並移除舊版本!

這樣就可在避免使用者進入到內部來修改或移除設定.

 

右击左边的"应用程序文件夹"打开属性对话框,将属性中的"defaultlocation"的路径中的"[manufacturer]"去掉,
不然的话做好的安装程序默认安装目录会是"c:/programm file/你的用户名/安装解决方案名称";

关于卸载

关方法一:
1.在打包項目中添加文件msiexec.exe(一般可在c:/windows/system32/下找到)
2.在文件系統視圖中選擇應用程序文件夾,在msiexec.exe上按右鍵,選擇創建快捷方式,重命名快捷方式為"卸载".
3.更改此快捷方式的Arguments 为"/x {產品id}",產品id的值為打包項目的ProductCode屬性值.

方法二:(推荐)
1.先生成安装包,记下ProductCode,下面要用到
2.用VS.net建立一个新的控制台程序uninst.exe文件
'power by: landlordh
'for 2000,xp,2003
Module uninstall
Sub Main()
Dim myProcess As Process = New Process
If System.Environment.OSVersion.ToString.IndexOf("NT 5") Then
myProcess.Start("msiexec", "/X{2B65D4A9-C146-4808-AB4B-321FB0779559}")    '改为自己的ProductCode
End If
myProcess.Close()
End Sub
End Module
3.将控制台程序BIN目录的exe文件加入到打包程序文件中,在程序组创建uninst.exe的快捷方式

在VS2003时,本人一直是用方法一进行打包,但是在VS2005下,用方法一是行不通的。出现问题如下:

警告 1 应将“msiexec.exe”排除,原因是其源文件“C:/WINDOWS/system32/msiexec.exe”受到“Windows 系统文件保护”。

把方法二中步骤二的代码改写成C#如下:
static void Main(string[] args)
{
System.Diagnostics.Process.Start("msiexec", "/X{460247B2-5FF0-4AF7-B4BC-B8BA3025231B}");
}

顺利进行打包OK. :)

关于隐藏控制台应用程序窗口

using System;
using System.Runtime.InteropServices;
using System.Threading;
class TestClass
{
static void Main(string[] args)
{
new TestClass();   
}
[DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lpClassName,string lpWindowName);

[DllImport("user32.dll", EntryPoint = "FindWindowEx")]   //找子窗体  
private static extern IntPtr FindWindowEx(IntPtr hwndParent,IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

[DllImport("User32.dll", EntryPoint = "SendMessage")]   //用于发送信息给窗体  
private static extern int SendMessage(IntPtr hWnd,int Msg, IntPtr wParam, string lParam);

[DllImport("User32.dll", EntryPoint = "ShowWindow")]   //
private static extern bool ShowWindow(IntPtr hWnd, int type);  

public TestClass()
{


System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "NOTEPAD.EXE";//打开一个记事本程序
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.Close();

Console.Title = "1111";
IntPtr ParenthWnd = new IntPtr(0);
IntPtr et = new IntPtr(0);
ParenthWnd = FindWindow(null, "1111");
if (!ParenthWnd.Equals(IntPtr.Zero))
Console.WriteLine("show");
else
Console.WriteLine("error");

ShowWindow(ParenthWnd, 0);//隐藏本dos窗体

Console.Read();

}

}

 

部署在.Net 平台下开发的应用程序,需要安装安装对应版本的.Net Framwork,而Vsual Studio 2003并没有提供一起打包的功能,所以这一点估计大多开发者都感觉不是太好,那如何将.Net Framework安装部署到客户机上呢?
其实微软提供了我们一个安装引导插件(Microsoft Visual Studio .NET 2003 引导程序插件),可以帮助我们在打包时,它会自动将.Net Framework打包放入你的安装程序中,完成了我们想要的功能。
建立安装程序项目,将自己需要打包的程序加入进去,编译过后,你会注意到在生成的安装目录下,你将会注意到多了几个文件(dotnetfx.exe、Config.ini、langpack.exe、Settings.ini),详细介绍如下:

Config.ini -- 安装配置文件
dotnetfx.exe -- .Net Framework组件
langpack.exe -- 语言包
Settings -- 设置文件
ItemSoft.msi -- .msi安装文件
Setup.exe -- 主安装程序

Config的文件内容如下:
[config.ini]
IDS_NOT_SINGLE_INSTANCE=已有另一版本的安装程序正在运行。 该应用程序一次只能运行一个版本。
IDS_DIALOG_CAPTION=%s 安装
IDS_SINGLE_INSTANCE_FAIL=CreateMutex 无法对单个的实例检查分配句柄。
IDS_SETUP_FAILURE=%s 安装失败。如果问题继续存在,请与产品支持人员联系。
IDS_DEFAULT_PRODUCTNAME=应用程序
IDS_SETTINGS_INIT_FAILURE=安装设置文件'%s'在解析时出错,或者无法定位该文件。
IDS_CREATE_PROCESS_FAILURE=下列命令行的 CreateProcess 操作失败: %s 。
IDS_INSUFFICIENT_PRIVILEGES=运行 %s 安装程序要求具有本地系统管理员的权限。安装程序现在退出。
IDS_DIALOG_TEXT=单击"确定"开始安装 %1 。单击"取消"退出安装。
IDS_ERROR_CAPTION=%s 安装错误
IDS_VERSION_DETECT_FAILED=%1 的版本检测失败。请确保安装程序存在于指定位置。%n%n返回消息: %2
IDS_MSI_NOT_FOUND=无法定位产品安装程序'%s'。安装程序现在退出。
IDS_REBOOT_QUERY=安装完成。现在重启吗?
IDS_SETUP_SUCCEEDED=安装成功。
IDS_INVALID_LANGID_CAPTION=无效的语言包代码
IDS_FX_NOT_FOUND=无法定位 .NET framework exe 文件'%s'。安装程序现在退出。
IDS_INVALID_LANGID_MESSAGE=语言包代码 %s 无效。跳过...
IDS_LANGPACK_NOT_FOUND=无法定位语言包 %s。安装程序现在退出。
IDS_MDAC_NOT_FOUND=无法定位 MDAC exe 文件'%s'。安装程序现在退出。
IDS_FILE_NOT_FOUND=无法定位'%1'。安装程序现在退出。

Settings.ini文件内容如下:
[Bootstrap]
MsiPath=ItemSoft.msi -- .msi安装文件
ProductName=中国亿万电器成套报价系统 --安装产品名称
MdacVersion=2.71
BootstrapFx=true
FxInstallerPath=
LanguageID=2052
BootstrapLangPack=true
LangPackInstallerPath=
BootstrapMdac=true
MdacInstallerPath=

这种方法能够很简单的将.Net Framwork与你的应用程序一起打包到安装程序中,并且自动检测客机上的是否安装过.Net Framework,然后运行安装。相信大家一定能够喜欢这个插件。

 

More: http://xucanzhao.cnblogs.com/archive/2005/10/02/248063.aspx

http://www.codeproject.com/KB/install/dotNetInstaller.aspx

http://www.microsoft.com/china/msdn/library/langtool/vsdotnet/usvs04j7.mspx?mfr=true

推荐:http://www.cnblogs.com/jenry/category/36997.html

 

参考资料:

http://hi.baidu.com/freezesoul/blog/item/38bfb1119347197cca80c4c0.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值