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:////WINDOWS////system32////msiexec.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
本文由VS软件圈(vssoft.net)发布,不代表VS软件圈立场,转载联系作者并注明出处:https://vssoft.net/vsazwt/VS2005anzhuangwenti/2020/0721/626.html