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

内容介绍:
介绍自定义安装程序的一些注意事项
介绍如何获取自定义界面和系统参数
介绍如何在安装过程中添加自定义操作

自定义安装程序的一些注意事项:
CustomActionData 属性
自定义操作的附加数据,读取自定义操作的安装信息
CustomActionData 属性采用 /name=value 的格式。多个值必须以单个空格隔开:/name1=value1 /name2=value2。如果值内有一个空格,则必须加引号:/name=“a value”。
可以传递 Windows 安装程序属性。对于像 [TARGETDIR] 这样返回目录的 Windows 安装程序属性,除了加括号外,还必须加引号和尾部反斜杠:/name=“[TARGETDIR]\”。
为了使自定义操作被视为安装组件,必须将 InstallerClass 属性设置为 true

以下是两个截自VS.NET2003,关于自定义安装的一些可以引用的系统属性:
Install1.jpg

Install2.jpg


自定义安装需要创建一些界面,然后获取这些界面的文本输入等信息,下面两个图介绍如何进行操作:

其中途中的文本框和复选框是作者添加的自定义界面。
Install4.jpg

为自定义安装添加自定义安装操作,指定来自定义安装的工程,如InstallAction即可。
Install5.jpg


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

在代码中引用参数

None.gif string  virtualRoot  =   this .Context.Parameters[ " vdir " ];  //  安装虚拟路径
None.gif
string  physicalRoot  =   this .Context.Parameters[ " targetdir " ];  //  安装物理路径
None.gif
string  connectionString  =   this .Context.Parameters[ " ConnectionString " ];  //  系统数据库链接字符串
None.gif


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

None.gif System.Diagnostics.ProcessWindowStyle.Hidden是执行命令而不显示DOS窗口
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/**/ /// <summary>
InBlock.gif
/// 后台执行DOS文件
InBlock.gif
/// </summary>
InBlock.gif
/// <param name="fileName">文件名(包含路径)</param>
InBlock.gif
/// <param name="argument">运行参数</param>
ExpandedBlockEnd.gif
/// <param name="hidden">是否隐藏窗口</param>

None.gif private   void  RunDos( string  fileName,  string  argument,  bool  hidden)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif Process process 
= new Process();
InBlock.gif process.EnableRaisingEvents 
= false;
ExpandedSubBlockStart.gifContractedSubBlock.gif process.StartInfo.FileName 
= string.Format("\"dot.gif{0}\"", fileName);
InBlock.gif process.StartInfo.Arguments 
= argument;
InBlock.gif 
if (hidden)
ExpandedSubBlockStart.gifContractedSubBlock.gif 
dot.gif{
InBlock.gif  process.StartInfo.WindowStyle 
= ProcessWindowStyle.Hidden;
ExpandedSubBlockEnd.gif }

InBlock.gif 
else
ExpandedSubBlockStart.gifContractedSubBlock.gif 
dot.gif{
InBlock.gif  process.StartInfo.WindowStyle 
= ProcessWindowStyle.Normal;
ExpandedSubBlockEnd.gif }

InBlock.gif process.Start();
InBlock.gif process.WaitForExit();
ExpandedBlockEnd.gif}

None.gif
None.gif


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

Install3.jpg

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

None.gif public   override   void  Install(System.Collections.IDictionary stateSaver) 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {  
InBlock.gif 
base.Install(stateSaver);  
InBlock.gif
InBlock.gif SaveConfig();  
//保存配置文件到文件,并保存到数据库中 
InBlock.gif
 SetupDB();   //安装Sql脚本
InBlock.gif
 InstallService(); //安装Windows服务
ExpandedBlockEnd.gif
}

None.gif
None.gif
protected   override   void  OnBeforeUninstall(System.Collections.IDictionary savedState)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif 
base.OnBeforeUninstall (savedState);
InBlock.gif
InBlock.gif UnInstallService();
//卸载Windows服务
ExpandedBlockEnd.gif
}

None.gif
None.gif


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

ExpandedBlockStart.gif ContractedBlock.gif /**/ /// <summary>
InBlock.gif
/// 执行SQL脚本
InBlock.gif
/// </summary>
InBlock.gif
/// <param name="path">脚本文件路径全名</param>
InBlock.gif
/// <param name="userID">数据库登录ID</param>
InBlock.gif
/// <param name="password">数据库登录密码</param>
ExpandedBlockEnd.gif
/// <param name="server">数据库服务器地址</param>

None.gif private   void  DoSQL( string  path,  string  userID,  string  password,  string  server)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif 
// -U -P -S -i关键字区分大小写
ExpandedSubBlockStart.gifContractedSubBlock.gif
 string arguments = String.Format(" -U {0} -P {1} -S {2} -i \"dot.gif{3}\"", userID, password, server, path);
InBlock.gif
InBlock.gif 
this.RunDos("osql.exe", arguments, false);
ExpandedBlockEnd.gif}

None.gif


Log目录创建授权操作

ExpandedBlockStart.gif ContractedBlock.gif /**/ /// <summary>
InBlock.gif
/// 创建Log目录并授权[Authenticated Users]可写
ExpandedBlockEnd.gif
/// </summary>

None.gif private   void  CreateLogDirAndAuthorize()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif 
string logDir = this.Context.Parameters["targetdir"+ "log";
InBlock.gif CreateDir(logDir);
InBlock.gif
InBlock.gif 
string patrolLogDir = this.Context.Parameters["targetdir"+ "YourWebDir/log";
InBlock.gif CreateDir(patrolLogDir);
ExpandedBlockEnd.gif}

None.gif
ExpandedBlockStart.gifContractedBlock.gif
/**/ /// <summary>
InBlock.gif
/// 根据指定的路径和用户名, 创建目录并授权
InBlock.gif
/// </summary>
InBlock.gif
/// <param name="logPathName">指定的目录绝对路径</param>
ExpandedBlockEnd.gif
/// <returns></returns>

None.gif private   void  CreateDir(String logPathName) 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif Directory.CreateDirectory(logPathName);
InBlock.gif
InBlock.gif System.Diagnostics.Process process 
= new System.Diagnostics.Process();  
InBlock.gif process.StartInfo.FileName 
= "cacls.exe";     
InBlock.gif process.StartInfo.Arguments 
= logPathName + " /G \"Authenticated Users\":F";
InBlock.gif process.StartInfo.WindowStyle 
= System.Diagnostics.ProcessWindowStyle.Normal;
InBlock.gif process.StartInfo.UseShellExecute 
= false;
InBlock.gif process.StartInfo.RedirectStandardInput 
= true;
InBlock.gif process.StartInfo.RedirectStandardError 
= true;
InBlock.gif process.Start();
InBlock.gif
InBlock.gif process.StandardInput.WriteLine(
"Y");
InBlock.gif process.WaitForExit();
InBlock.gif process.Close(); 
InBlock.gif process.Dispose();
ExpandedBlockEnd.gif}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值