VS2005 winform安装包问题 我们的解决方案是单独打包,数据库和应用程序分离,数据库可以用一个Installer类来完成,具体操作我就不细说了,网上很多的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 请问thfthf2() ,我也是用Installer类来打包数据库部分的,并且数据库安装也成功了。但我在系统开始菜单栏里点击快捷方式时,它仍然提示我是否安装数据库,这是我得部分源码 public override void Install(IDictionary stateSaver) { if (this.Context.Parameters["STRUSER"] != null) this.strUser = this.Context.Parameters["STRUSER"]; if (this.Context.Parameters["STRPASS"] != null) this.strPass = this.Context.Parameters["STRPASS"]; if (this.Context.Parameters["STRSERVER"] != null) this.strServer = this.Context.Parameters["STRSERVER"]; if (this.Context.Parameters["STRDBNAME"] != null) this.strDbName = this.Context.Parameters["STRDBNAME"]; DialogResult dialogResult = MessageBox.Show("是否在本次安装过程中安装数据库?" , "安装向导", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (dialogResult == DialogResult.Yes) { AddDBTable(); } try { //删除数据库脚本 Directory.Delete(this.Context.Parameters["TARGETDIR"] + "\\" + "InstallSql", true); } catch { } //写入数据库配置 ChangeFileToEnableWrite(this.Context.Parameters["TARGETDIR"] + "UUMTool.exe.config"); string connectionString = "server=" + strServer + ";database=" + strDbName + ";user id=" + strUser + ";password=" + strPass + ";"; Encrypt encrypt = new Encrypt(); connectionString = encrypt.EncryptOrDecrypt(true, connectionString); try { WriteConnectionInfo(connectionString, this.Context.Parameters["TARGETDIR"] + "UUMTool.exe"); } catch (Exception err) { MessageBox.Show("数据库配置写入失败!", "安装向导", MessageBoxButtons.OK, MessageBoxIcon.Error); } }private void ChangeFileToEnableWrite(string filePath) { FileInfo fileInfo = new FileInfo(filePath); if (fileInfo.Exists) { if (fileInfo.IsReadOnly) { File.SetAttributes(filePath, FileAttributes.Normal); } } } protected void AddDBTable() { try { //Create the database. ExecuteSql("master", "EXEC sp_addextendedproc 'xp_md5', '" + this.Context.Parameters["TARGETDIR"] + "xp_md5.dll'"); } catch (Exception ex) { if (!ErrorIsContinue(ex)) { throw ex; } } try { ExecuteSql("master", "CREATE DATABASE " + strDbName); // Create the tables. } catch (Exception ex) { if (!ErrorIsContinue(ex)) { throw ex; } } try { ExecuteSql(strDbName, GetSql("DBScript.sql")); } catch (Exception ex) { if (!ErrorIsContinue(ex)) { throw ex; } } try { ExecuteSql(strDbName, GetSql("fn_md5.sql")); } catch (Exception ex) { if (!ErrorIsContinue(ex)) { throw ex; } } try { ExecuteSql(strDbName, GetSql("Get_BMSInfo.sql")); } catch (Exception ex) { if (!ErrorIsContinue(ex)) { throw ex; } } try { ExecuteSql(strDbName, GetSql("Get_Password.sql")); } catch (Exception ex) { if (!ErrorIsContinue(ex)) { throw ex; } } try { ExecuteSql(strDbName, GetSql("getglobalusername.sql")); } catch (Exception ex) { if (!ErrorIsContinue(ex)) { throw ex; } } try { ExecuteSql(strDbName, GetSql("ICPC_SSO_MD5Test.sql")); } catch (Exception ex) { if (!ErrorIsContinue(ex)) { throw ex; } } try { ExecuteSql(strDbName, GetSql("SS_UserGet.sql")); } catch (Exception ex) { if (!ErrorIsContinue(ex)) { throw ex; } } try { ExecuteSql(strDbName, GetSql("SS_UserList.sql")); } catch (Exception ex) { if (!ErrorIsContinue(ex)) { throw ex; } } try { ExecuteSql(strDbName, GetSql("SS_UserUpdate.sql")); } catch (Exception ex) { if (!ErrorIsContinue(ex)) { throw ex; } } } /// <summary> /// 安装过程中出错是否继续 /// </summary> /// <param name="ex"></param> /// <returns></returns> private bool ErrorIsContinue(Exception ex) { DialogResult dialogResult=MessageBox.Show("安装过程中,发生以下错误,是否继续安装?" + System.Environment.NewLine + ex.Message, "安装向导", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (dialogResult == DialogResult.Yes) { return true; } return false; } private void ExecuteSql(string DatabaseName, string Sql) { SqlConnection sqlConnection1 = new SqlConnection("user id=" + strUser + ";password=" + strPass + ";database=master;server=" + strServer); SqlCommand Command = new SqlCommand(Sql, sqlConnection1); Command.Connection.Open(); Command.Connection.ChangeDatabase(DatabaseName); try { Command.ExecuteNonQuery(); } catch (Exception ex) { throw ex; } finally { Command.Connection.Close(); } } private string GetSql(string strName) { try { string fileNote = File.ReadAllText(this.Context.Parameters["TARGETDIR"] + "\\InstallSql\\" + strName); return fileNote; } catch (Exception ex) { throw ex; } } 一般不用他自己的打包用INSTALLSHILD也不挫吗 大家来评评我的代码。。。。。。 两个不同的程序版本应该用什么来实现 多线程操作,锁定全局变量问题 哪位大哥看得懂Delphi的帮忙翻译一下 谢谢。。。 如何动态调用一个类,并对返回结果进行处理。 在Bitmap上写文本~~我是一个一个字写上去的。几十K还好说,几百K文本要五六分钟谁帮我优化下!! 如何实现100个并发连接(测试用的). C# and Oracle9iQQL WORD模式 如何查找到当前控件的下一控件? 那位高手做过MMC Snap-In 请加我MSN 新手,求助2个Form之间的问题
public override void Install(IDictionary stateSaver)
{ if (this.Context.Parameters["STRUSER"] != null)
this.strUser = this.Context.Parameters["STRUSER"];
if (this.Context.Parameters["STRPASS"] != null)
this.strPass = this.Context.Parameters["STRPASS"];
if (this.Context.Parameters["STRSERVER"] != null)
this.strServer = this.Context.Parameters["STRSERVER"];
if (this.Context.Parameters["STRDBNAME"] != null)
this.strDbName = this.Context.Parameters["STRDBNAME"];
DialogResult dialogResult = MessageBox.Show("是否在本次安装过程中安装数据库?" , "安装向导", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dialogResult == DialogResult.Yes)
{
AddDBTable();
}
try
{
//删除数据库脚本
Directory.Delete(this.Context.Parameters["TARGETDIR"] + "\\" + "InstallSql", true);
}
catch { } //写入数据库配置
ChangeFileToEnableWrite(this.Context.Parameters["TARGETDIR"] + "UUMTool.exe.config");
string connectionString = "server=" + strServer + ";database=" + strDbName + ";user id=" + strUser + ";password=" + strPass + ";";
Encrypt encrypt = new Encrypt();
connectionString = encrypt.EncryptOrDecrypt(true, connectionString);
try
{
WriteConnectionInfo(connectionString, this.Context.Parameters["TARGETDIR"] + "UUMTool.exe");
}
catch (Exception err)
{
MessageBox.Show("数据库配置写入失败!", "安装向导", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ChangeFileToEnableWrite(string filePath)
{
FileInfo fileInfo = new FileInfo(filePath);
if (fileInfo.Exists)
{
if (fileInfo.IsReadOnly)
{
File.SetAttributes(filePath, FileAttributes.Normal);
}
}
}
{
try
{
//Create the database.
ExecuteSql("master", "EXEC sp_addextendedproc 'xp_md5', '" + this.Context.Parameters["TARGETDIR"] + "xp_md5.dll'");
}
catch (Exception ex)
{
if (!ErrorIsContinue(ex))
{
throw ex;
}
}
try
{
ExecuteSql("master", "CREATE DATABASE " + strDbName);
// Create the tables.
}
catch (Exception ex)
{
if (!ErrorIsContinue(ex))
{
throw ex;
}
}
try
{
ExecuteSql(strDbName, GetSql("DBScript.sql"));
}
catch (Exception ex)
{
if (!ErrorIsContinue(ex))
{
throw ex;
}
}
try
{
ExecuteSql(strDbName, GetSql("fn_md5.sql"));
}
catch (Exception ex)
{
if (!ErrorIsContinue(ex))
{
throw ex;
}
}
try
{
ExecuteSql(strDbName, GetSql("Get_BMSInfo.sql"));
}
catch (Exception ex)
{
if (!ErrorIsContinue(ex))
{
throw ex;
}
}
try
{
ExecuteSql(strDbName, GetSql("Get_Password.sql"));
}
catch (Exception ex)
{
if (!ErrorIsContinue(ex))
{
throw ex;
}
}
try
{
ExecuteSql(strDbName, GetSql("getglobalusername.sql"));
}
catch (Exception ex)
{
if (!ErrorIsContinue(ex))
{
throw ex;
}
}
try
{
ExecuteSql(strDbName, GetSql("ICPC_SSO_MD5Test.sql"));
}
catch (Exception ex)
{
if (!ErrorIsContinue(ex))
{
throw ex;
}
}
try
{
ExecuteSql(strDbName, GetSql("SS_UserGet.sql"));
}
catch (Exception ex)
{
if (!ErrorIsContinue(ex))
{
throw ex;
}
}
try
{
ExecuteSql(strDbName, GetSql("SS_UserList.sql"));
}
catch (Exception ex)
{
if (!ErrorIsContinue(ex))
{
throw ex;
}
}
try
{
ExecuteSql(strDbName, GetSql("SS_UserUpdate.sql"));
}
catch (Exception ex)
{
if (!ErrorIsContinue(ex))
{
throw ex;
}
}
}
/// 安装过程中出错是否继续
/// </summary>
/// <param name="ex"></param>
/// <returns></returns>
private bool ErrorIsContinue(Exception ex)
{
DialogResult dialogResult=MessageBox.Show("安装过程中,发生以下错误,是否继续安装?" + System.Environment.NewLine + ex.Message, "安装向导", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dialogResult == DialogResult.Yes)
{
return true;
}
return false;
}
private void ExecuteSql(string DatabaseName, string Sql)
{
SqlConnection sqlConnection1 = new SqlConnection("user id=" + strUser + ";password=" + strPass + ";database=master;server=" + strServer);
SqlCommand Command = new SqlCommand(Sql, sqlConnection1);
Command.Connection.Open();
Command.Connection.ChangeDatabase(DatabaseName);
try
{
Command.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
finally
{
Command.Connection.Close();
}
}
private string GetSql(string strName)
{
try
{
string fileNote = File.ReadAllText(this.Context.Parameters["TARGETDIR"] + "\\InstallSql\\" + strName);
return fileNote;
}
catch (Exception ex)
{
throw ex;
}
}