我正在使用VS08中的msdn example来了解如何创建自定义安装程序,我已经按照它来处理了这个问题。我做的唯一改变是我用C#而不是VB实现了代码。它编译没有任何错误并且似乎安装,但是被覆盖的安装方法没有被调用,因此没有“安装”。
根据我在网上阅读的同时研究这个问题,我发现有些人在调用卸载方法时遇到了问题,但是他们的安装方法运行正常。我决定按照其中的一些建议来考虑它可能会无意中帮助我,所以我的代码比msdn示例更加流畅,但是我的代码底部没有被覆盖的函数被调用。
我一直密切关注细节,但由于看似缺乏关于这个问题的文档,我觉得我必须错过一些简单的东西。我的类库代码如下。
using System;
using System.IO;
using System.Reflection;
using System.Configuration;
using System.Data.SqlClient;
using System.Collections;
using System.Configuration.Install;
namespace DBCustomAction
{
public partial class CsDeployInstaller : Installer
{
public CsDeployInstaller()
{
InitializeComponent();
}
private string GetSql(string Name)
{
try
{
Assembly asm = Assembly.GetExecutingAssembly();
Stream strm = asm.GetManifestResourceStream(asm.GetName().Name + "." + Name);
StreamReader reader = new StreamReader(strm, System.Text.Encoding.Default);
// System.Text.Encoding.ASCII;
return reader.ReadToEnd();
}
catch (Exception ex)
{
Console.Write("In GetSql:" + ex.Message);
throw ex;
}
}
private void ExecuteSql(string DataBaseName, string Sql)
{
string ConnectionString = ConfigurationManager.ConnectionStrings["masterConnectionString"].ToString();
//string ConnectionString = @"Data Source=.\sqlexpress;Initial Catalog=master;Integrated Security=True";
SqlConnection sqlConnection1 = new SqlConnection(ConnectionString);
System.Data.SqlClient.SqlCommand Command = new System.Data.SqlClient.SqlCommand(Sql, sqlConnection1);
Command.Connection.Open();
Command.Connection.ChangeDatabase(DataBaseName);
try
{
Command.ExecuteNonQuery();
}
finally
{
Command.Connection.Close();
}
}
protected void AddDBTable(string strDBName)
{
try
{
ExecuteSql("master", "CREATE DATABASE " + strDBName);
ExecuteSql(strDBName, GetSql("sql.txt"));
}
catch (Exception ex)
{
Console.WriteLine("In exception handler:" + ex.Message);
}
}
public override void Install(IDictionary stateSaver)
{
Console.WriteLine("Install is working");
base.Install(stateSaver);
AddDBTable(this.Context.Parameters["dbname"]);
}
public override void Uninstall(IDictionary savedState)
{
Console.WriteLine("I am uninstalling this");
base.Uninstall(savedState);
}
public override void Commit(IDictionary savedState)
{
Console.WriteLine("Commit Function");
base.Commit(savedState);
}
public override void Rollback(IDictionary savedState)
{
Console.WriteLine("rollback works!");
base.Rollback(savedState);
}
}
}
无法调用任何Console.WriteLine命令。只是为了好玩,我还运行了一个跟踪来检测数据库是否被安装程序确认,并且没有任何内容。
任何帮助将不胜感激!
答案 0 :(得分:1)
除了这个问题之外,我不知道如何回答你的问题:
http://msdn.microsoft.com/en-us/library/9cdb5eda(v=VS.100).aspx
如果你遵循这些步骤,你应该做得很好。