且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

VS.NET中自定义安装程序制作经验总结

更新时间:2022-08-19 19:50:56

内容介绍:
介绍自定义安装程序的一些注意事项
介绍如何获取自定义界面和系统参数
介绍如何在安装过程中添加自定义操作
自定义安装程序的一些注意事项:
CustomActionData 属性
自定义操作的附加数据,读取自定义操作的安装信息 
CustomActionData 属性采用 /name=value 的格式。多个值必须以单个空格隔开:/name1=value1 /name2=value2。如果值内有一个空格,则必须加引号:/name=“a value”。 
可以传递 Windows 安装程序属性。对于像 [TARGETDIR] 这样返回目录的 Windows 安装程序属性,除了加括号外,还必须加引号和尾部反斜杠:/name=“[TARGETDIR]\”。 
为了使自定义操作被视为安装组件,必须将 InstallerClass 属性设置为 true 
以下是两个截自VS.NET2003,关于自定义安装的一些可以引用的系统属性:
VS.NET中自定义安装程序制作经验总结

VS.NET中自定义安装程序制作经验总结


自定义安装需要创建一些界面,然后获取这些界面的文本输入等信息,下面两个图介绍如何进行操作:
其中途中的文本框和复选框是作者添加的自定义界面。
VS.NET中自定义安装程序制作经验总结

为自定义安装添加自定义安装操作,指定来自定义安装的工程,如InstallAction即可。
VS.NET中自定义安装程序制作经验总结


如何获取自定义界面和系统参数:
在自定义操作中添加CustomActionData 属性数据.
/ConnectionString="[CONNECTIONSTRING]" /vdir=[TARGETVDIR] /targetdir="[TARGETDIR]\"

在代码中引用参数

VS.NET中自定义安装程序制作经验总结string virtualRoot = this.Context.Parameters["vdir"]; // 安装虚拟路径
VS.NET中自定义安装程序制作经验总结
string physicalRoot = this.Context.Parameters["targetdir"]; // 安装物理路径
VS.NET中自定义安装程序制作经验总结
string connectionString = this.Context.Parameters["ConnectionString"]; // 系统数据库链接字符串
VS.NET中自定义安装程序制作经验总结

如何在安装过程中添加自定义操作:
运行Dos命令
在创建虚拟目录或者安装数据库脚本等操作需要调用Dos命令

VS.NET中自定义安装程序制作经验总结System.Diagnostics.ProcessWindowStyle.Hidden是执行命令而不显示DOS窗口
VS.NET中自定义安装程序制作经验总结
VS.NET中自定义安装程序制作经验总结/// <summary>
VS.NET中自定义安装程序制作经验总结
/// 后台执行DOS文件
VS.NET中自定义安装程序制作经验总结
/// </summary>
VS.NET中自定义安装程序制作经验总结
/// <param name="fileName">文件名(包含路径)</param>
VS.NET中自定义安装程序制作经验总结
/// <param name="argument">运行参数</param>
VS.NET中自定义安装程序制作经验总结
/// <param name="hidden">是否隐藏窗口</param>

VS.NET中自定义安装程序制作经验总结private void RunDos(string fileName, string argument, bool hidden)
VS.NET中自定义安装程序制作经验总结{
VS.NET中自定义安装程序制作经验总结 Process process = new Process();
VS.NET中自定义安装程序制作经验总结 process.EnableRaisingEvents = false;
VS.NET中自定义安装程序制作经验总结 process.StartInfo.FileName = string.Format("\"{0}\"", fileName);
VS.NET中自定义安装程序制作经验总结 process.StartInfo.Arguments = argument;
VS.NET中自定义安装程序制作经验总结 if (hidden)
VS.NET中自定义安装程序制作经验总结 {
VS.NET中自定义安装程序制作经验总结  process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
VS.NET中自定义安装程序制作经验总结 }

VS.NET中自定义安装程序制作经验总结 else
VS.NET中自定义安装程序制作经验总结 {
VS.NET中自定义安装程序制作经验总结  process.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
VS.NET中自定义安装程序制作经验总结 }

VS.NET中自定义安装程序制作经验总结 process.Start();
VS.NET中自定义安装程序制作经验总结 process.WaitForExit();
VS.NET中自定义安装程序制作经验总结}

VS.NET中自定义安装程序制作经验总结
VS.NET中自定义安装程序制作经验总结

使用活动目录DirectoryEntry创建虚拟目录:

VS.NET中自定义安装程序制作经验总结

覆盖Installer的函数实现自定义安装及卸载

VS.NET中自定义安装程序制作经验总结public override void Install(System.Collections.IDictionary stateSaver) 
VS.NET中自定义安装程序制作经验总结{  
VS.NET中自定义安装程序制作经验总结 base.Install(stateSaver);  
VS.NET中自定义安装程序制作经验总结
VS.NET中自定义安装程序制作经验总结 SaveConfig();  //保存配置文件到文件,并保存到数据库中 
VS.NET中自定义安装程序制作经验总结
 SetupDB();   //安装Sql脚本
VS.NET中自定义安装程序制作经验总结
 InstallService(); //安装Windows服务
VS.NET中自定义安装程序制作经验总结
}

VS.NET中自定义安装程序制作经验总结
VS.NET中自定义安装程序制作经验总结protected override void OnBeforeUninstall(System.Collections.IDictionary savedState)
VS.NET中自定义安装程序制作经验总结{
VS.NET中自定义安装程序制作经验总结 base.OnBeforeUninstall (savedState);
VS.NET中自定义安装程序制作经验总结
VS.NET中自定义安装程序制作经验总结 UnInstallService();//卸载Windows服务
VS.NET中自定义安装程序制作经验总结
}

VS.NET中自定义安装程序制作经验总结
VS.NET中自定义安装程序制作经验总结

在自定义安装中执行数据库脚本

VS.NET中自定义安装程序制作经验总结/// <summary>
VS.NET中自定义安装程序制作经验总结
/// 执行SQL脚本
VS.NET中自定义安装程序制作经验总结
/// </summary>
VS.NET中自定义安装程序制作经验总结
/// <param name="path">脚本文件路径全名</param>
VS.NET中自定义安装程序制作经验总结
/// <param name="userID">数据库登录ID</param>
VS.NET中自定义安装程序制作经验总结
/// <param name="password">数据库登录密码</param>
VS.NET中自定义安装程序制作经验总结
/// <param name="server">数据库服务器地址</param>

VS.NET中自定义安装程序制作经验总结private void DoSQL(string path, string userID, string password, string server)
VS.NET中自定义安装程序制作经验总结{
VS.NET中自定义安装程序制作经验总结 // -U -P -S -i关键字区分大小写
VS.NET中自定义安装程序制作经验总结
 string arguments = String.Format(" -U {0} -P {1} -S {2} -i \"{3}\"", userID, password, server, path);
VS.NET中自定义安装程序制作经验总结
VS.NET中自定义安装程序制作经验总结 this.RunDos("osql.exe", arguments, false);
VS.NET中自定义安装程序制作经验总结}

VS.NET中自定义安装程序制作经验总结

Log目录创建授权操作

VS.NET中自定义安装程序制作经验总结/// <summary>
VS.NET中自定义安装程序制作经验总结
/// 创建Log目录并授权[Authenticated Users]可写
VS.NET中自定义安装程序制作经验总结
/// </summary>

VS.NET中自定义安装程序制作经验总结private void CreateLogDirAndAuthorize()
VS.NET中自定义安装程序制作经验总结{
VS.NET中自定义安装程序制作经验总结 string logDir = this.Context.Parameters["targetdir"] + "log";
VS.NET中自定义安装程序制作经验总结 CreateDir(logDir);
VS.NET中自定义安装程序制作经验总结
VS.NET中自定义安装程序制作经验总结 string patrolLogDir = this.Context.Parameters["targetdir"] + "YourWebDir/log";
VS.NET中自定义安装程序制作经验总结 CreateDir(patrolLogDir);
VS.NET中自定义安装程序制作经验总结}

VS.NET中自定义安装程序制作经验总结
VS.NET中自定义安装程序制作经验总结/// <summary>
VS.NET中自定义安装程序制作经验总结
/// 根据指定的路径和用户名, 创建目录并授权
VS.NET中自定义安装程序制作经验总结
/// </summary>
VS.NET中自定义安装程序制作经验总结
/// <param name="logPathName">指定的目录绝对路径</param>
VS.NET中自定义安装程序制作经验总结
/// <returns></returns>

VS.NET中自定义安装程序制作经验总结private void CreateDir(String logPathName) 
VS.NET中自定义安装程序制作经验总结{
VS.NET中自定义安装程序制作经验总结 Directory.CreateDirectory(logPathName);
VS.NET中自定义安装程序制作经验总结
VS.NET中自定义安装程序制作经验总结 System.Diagnostics.Process process = new System.Diagnostics.Process();  
VS.NET中自定义安装程序制作经验总结 process.StartInfo.FileName = "cacls.exe";     
VS.NET中自定义安装程序制作经验总结 process.StartInfo.Arguments = logPathName + " /G \"Authenticated Users\":F";
VS.NET中自定义安装程序制作经验总结 process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
VS.NET中自定义安装程序制作经验总结 process.StartInfo.UseShellExecute = false;
VS.NET中自定义安装程序制作经验总结 process.StartInfo.RedirectStandardInput = true;
VS.NET中自定义安装程序制作经验总结 process.StartInfo.RedirectStandardError = true;
VS.NET中自定义安装程序制作经验总结 process.Start();
VS.NET中自定义安装程序制作经验总结
VS.NET中自定义安装程序制作经验总结 process.StandardInput.WriteLine("Y");
VS.NET中自定义安装程序制作经验总结 process.WaitForExit();
VS.NET中自定义安装程序制作经验总结 process.Close(); 
VS.NET中自定义安装程序制作经验总结 process.Dispose();
VS.NET中自定义安装程序制作经验总结}

VS.NET中自定义安装程序制作经验总结
本文转自博客园伍华聪的博客,原文链接:VS.NET中自定义安装程序制作经验总结,如需转载请自行联系原博主。