安装部署问题(想在安装程序类中实现修改配置文件,不知道怎样获取配置文件的路径)

nsi20141 2004-06-25 11:17:05
想把数据库名称、用户名、密码等连接数据库的字符串在安装时用文本框的形式让用户输入,在安装结束时动态的写到xml文件中,这样就不用在部署后再修改连接数据库的字符串了。
现在遇到的问题是不知道怎么获取填加到应用程序文件夹中的配置文件的路径?
不知道说清楚没有
希望各位帮我看看,谢谢!!
...全文
508 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
edobnet 2004-06-25
  • 打赏
  • 举报
回复
新建项目,写这个类,最后在安装项目里,开始安装时执行这个项目的输出!
using System;
using System.Collections;
using System.ComponentModel;
using System.Configuration.Install;
using System.Reflection;
using System.IO;
using System.Text;

namespace DBCustomAction
{
/// <summary>
/// DBCustomAction 的摘要说明。
/// </summary>
[RunInstaller(true)]
public class DBCustomAction : System.Configuration.Install.Installer
{
private System.Data.SqlClient.SqlConnection sqlConnection1;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;

public DBCustomAction()
{
// 该调用是设计器所必需的。
InitializeComponent();

// TODO: 在 InitializeComponent 调用后添加任何初始化
}

/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
private string GetSql()
{

StringBuilder myBuilder=new StringBuilder();
myBuilder.Append("if exists (select * from sysobjects where id = object_id(N'[dbo].[成员表]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)");
myBuilder.Append("drop table [dbo].[成员表]; ");
myBuilder.Append(@" CREATE TABLE [成员表] ( [Name] [char] (30) NOT NULL , [Rsvp] [int] NULL , [Requests] [nvarchar] (4000) NULL )
ALTER TABLE [成员表] WITH NOCHECK ADD CONSTRAINT [PK_MK_Employees] PRIMARY KEY NONCLUSTERED ( [Name] );");

myBuilder.Append("INSERT [成员表] ( [Name] , [Rsvp] , [Requests] ) VALUES ( '31' , 11 , '12221' );");
return myBuilder.ToString();


}

private string ReturnMasterSql()
{

StringBuilder myBuilder=new StringBuilder();
myBuilder.Append("if exists(select * from sysdatabases where [name] like 'friend') drop database friend ");
myBuilder.Append("CREATE DATABASE friend");

return myBuilder.ToString();

}


private void ExecuteSql(string DataBaseName,string Sql)
{
System.Data.SqlClient.SqlCommand Command = new System.Data.SqlClient.SqlCommand(Sql,sqlConnection1);

Command.Connection.Open();
Command.Connection.ChangeDatabase(DataBaseName);

Command.ExecuteNonQuery();

Command.Connection.Close();

}


protected void AddDBTable(string strDBName)
{

ExecuteSql("master",ReturnMasterSql());
ExecuteSql(strDBName,GetSql());

}

public override void Install(System.Collections.IDictionary stateSaver)
{
base.Install(stateSaver);
AddDBTable(this.Context.Parameters["dbname"]);
}



#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.sqlConnection1 = new System.Data.SqlClient.SqlConnection();
//
// sqlConnection1
//
this.sqlConnection1.ConnectionString = "workstation id=黄海;packet size=4096;user id=sa;data source=黄海;persist security inf" +
"o=True;initial catalog=master;password=mdcija";

}
#endregion
}
}
nsi20141 2004-06-25
  • 打赏
  • 举报
回复
来人帮我看看啊
guying999 2004-06-25
  • 打赏
  • 举报
回复
参考:
http://dev.csdn.net/develop/article/27/27814.shtm
nsi20141 2004-06-25
  • 打赏
  • 举报
回复
解决了 但还是要谢谢楼上的朋友!

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧