在文件系统视图中选择应用程序文件,在msiexec.exe上单击右键选择“创建快捷方式”,重命名快捷方式为“uninstall”.
更改此快捷方式Argmuments为“/x {产品ID}”,产品ID的值为打包项目的ProductCode属性值。
注:ProudctCode(选择解决方案资源管理根目录如Setup1,再查看属性标签,不是右键属性)
string sysroot = System.Environment.SystemDirectory;
System.Diagnostics.Process.Start(sysroot + " //msiexec.exe", "/x {850FED90-20D0-4EBA-BEDB-3D9DBA25F6EC} /qr");
1. 新建Setup Project(VS 2005)
2. 在文件系统编辑器中添加文件,程序集,项目输出,文件夹等。添加程序集时应注意程序集的依赖关系(例如,同一个文件夹下有A.dll,B.dll,C.dll;其中C.dll依赖于另两个dll,那么在添加C.dll时会自动将另两个程序集添加)
3. 文件的PackageAs属性设置是否将文件打包到msi中,vsdpaDefault为是,vsdpaLoose为否,编译时自动将文件copy到与msi同级目录下
4. 添加快捷方式:对文件右击创建快捷方式,将其移到桌面或开始菜单目录下。可编辑其名字,图标等
5. 安装完自动启动
需添加Custom Action Editor中添加Custom Action,
CustomActiont,里面添加程序集引用。程序集通常是下面格式的类(里面可以设置安装前、安装后、卸载前、卸载后的操作)。添加时,可能还会涉及到一些CustomerActionData(程序集属性) (/targetdir="[TARGETDIR]/" /sourcedir="[SourceDir]/")
[RunInstaller(true)]
public class AutoUnInstall : System.Configuration.Install.Installer
{
protected override void OnAfterInstall(IDictionary savedState)
{
string aimPath = base.Context.Parameters["targetdir"].ToString();
//…
}
}
6. 可用Condition可设置一些用户选择条件,当然也得添加用户界面(User Interface Editor)
7. 文件安装路径
Set the Default location for Application Location([ProgramFilesFolder][Manufacturer]/[ProductName])
8. 卸载快捷方式
C:/WINDOWS/system32/msiexec.exe
Add parameter:"/x {ProductCode}"
9. Vista下必须用Setup安装,不能直接用msi安装的问题,快捷方式引起重新安装(删除任意文件)问题
cscript.exe "$(ProjectDir)CustomAction_NoImpersonate.js" "$(BuiltOuputPath)"&cscript.exe "$(ProjectDir)WiRunSQL.vbs" "$(BuiltOuputPath)" "INSERT INTO `Error` (`Error`, `Message`) VALUES (1001, 'Error [1]: [2]')" &cscript //nologo "$(ProjectDir)WiRunSql.vbs" "$(BuiltOuputPath)" "INSERT INTO Property(Property, Value) VALUES ('DISABLEADVTSHORTCUTS', '1')"
将CustomAction_NoImpersonate.js,WiRunSQL.vbs放在Setup project同级文件夹下。
10. 引用
http://msdn.microsoft.com/en-us/library/19x10e5c(VS.71).aspx
http://msdn.microsoft.com/en-us/library/ms228283(VS.80).aspx
http://www.shahine.com/omar/VSTOAddinsAndVista.aspx
11. XCopy
http://baike.baidu.com/view/893375.htm?fr=ala0
/i 如果 Source 是一个目录或包含通配符,而 Destination 不存在,xcopy 会假定destination 指定目录名并创建一个新目录。然后,xcopy 会将所有指定文件复制到新目录中。默认情况下,xcopy 将提示您指定 destination 是文件还是目录。
/s 复制非空的目录和子目录。如果省略 /s,xcopy 将在一个目录中工作。
/e 复制所有子目录,包括空目录。同时使用 /e、/s 和 /t 命令行选项。
/t 只复制子目录结构(即目录树),不复制文件。要复制空目录,必须包含 /e 命令行选项。
XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
[/C] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
[/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z]
[/EXCLUDE:file1[+file2][+file3]...]
12. MS Build
http://msdn.microsoft.com/zh-cn/library/0k6kkbsd(VS.80).aspx
http://msdn.microsoft.com/en-us/library/ms171452.aspx
"Script"