1,数据组织
将工程代码Release下的发在一个地方,将插件(如第三方Dll、Com组件等)放在一个地方、另外将快捷方式所需图标放在一个地方
如上图,【系统文件】放置工程Release下的所有生成内容,图片方式两张图片
插件放置所需要的依赖Com组件等。
2,建立打包工程
3,文件资源关联
打开【文件系统视图】,其他视图中【注册表】、【自定义操作】可能用机会的靠前些。
打开【系统文件】,选中所有内容,直接拖到上图右侧空白区域,添加后如果发现有重复Dll名称的,去掉大写的DLL,修改属性中的Exclude属性为false即可
或者看属性中的路径,尽量保证采用的是【系统文件】中的路径地址。
然后将【插件】和【图片】两个文件夹选中,直接拖放至“文件系统视图”右侧空白区内。
如果【插件】中有需要COM注册的,在“文件系统视图”右侧中找到该DLL文件,在属性中找到Register属性,修改为vsdrfCOMSelfReg。
4,桌面快捷方式和开始菜单
a,在【用户的“程序”菜单】中添加一个文件夹,正确命名,安装后会在【所有程序】中出现。
b,在【文件系统视图】中将主程序EXE复制快捷方式(如上图),复制到上面建立的文件夹下,同时复制一份到用户桌面中,两个文件代表了开始菜单和桌面对应项,所以属性统一设置如下:
1,设置名称,也就是在开始菜单和桌面中显示的名称。2,设置Description。
5,卸载
该过程应该在6操作后完成,因为卸载的属性依赖于项目的【ProductCode】属性,而该属性在“版本号”修改后会自动改变。请注意。
a,首先添加一个msiexec.exe进去,这个文件在c:\windows\system32文件夹下,
然后给他创建一个快捷方式,放到"开始-程序"中,修改名称、图标属性,类似4中操作步骤。
然后修改【Arguments】属性为【/x 【ProductCode】】,其中【ProductCode】在项目属性中可以找到
6,属性填写(系统必备、版本、产品名称、公司名称)
需要注意以下属性:【Author】、【Description】、【Manufacturer】、【ProductName】、【Title】、【Version】等
然后选择,查看其属性,主要修改【DefaultLocation】属性为如下形式
一般默认会将VS对应的Framework版本作为系统必备,可以在项目属性中查看
7,Release模式生成
然后在Release模式下生成。生成的名称可以在项目属性中查看修改:
8,MSI属性修改(orca)
安装Orca工具,打开7中生成的MSI文件。如下图所示,左侧选中【Shortcut】,右侧找到“Directory_”字段下值为【DesktopFolder】的记录,修改【Target】字段的值为[TARGETDIR]主程序名称.exe
示例中为[TARGETDIR]TestWindow.exe。这样做主要是避免VS打包后生成的安装包在安装后桌面快捷方式无法查看其文件路径。
9,对注册表操作的一个应用
A,首先要对项目的属性设置好
要注意属性:Manufactuer、ProductName、RemovePreviousVersions
B,注册表视图中添加一个值
才、这样在系统安装后就会在注册表对应位置写入值。
C,如果对安装过程中有特殊操作编码要求,可以新建一个类库工程,然后新建一个【安装程序类】
安装程序类中会有如下事件:
可以在对应事件中进行一系列编码操作。比如对注册表的操作等。
private void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e)
{
//HKEY_LOCAL_MACHINE\SOFTWARE\Planning3DSystem
RegistryKey software = Registry.LocalMachine.OpenSubKey("SOFTWARE");
if (software == null)
return;
RegistryKey planningkey = software.OpenSubKey("Planning3DSystem", true);
if (planningkey == null)
return;
string path = planningkey.GetValue("path").ToString();
if (string.IsNullOrEmpty(path))
{
return;
}
if (!File.Exists(path))
{
return;
}
if (path.Contains("Program Files"))
{
path = path.Replace("Program Files", "Progra~1");
planningkey.SetValue("path", path);
}
}
D,如果建立了上述类库,需要把类库放在”文件系统视图“中的一个位置,然后在”自定义操作视图“中引用该DLL文件
这样在安装过程中就会相应类库中编写的对应代码了。