在c#install项目中没有调用安装方法

时间:2011-06-22 16:26:54

标签: visual-studio-2008 deployment windows-installer msdn

我正在使用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命令。只是为了好玩,我还运行了一个跟踪来检测数据库是否被安装程序确认,并且没有任何内容。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

除了这个问题之外,我不知道如何回答你的问题:

http://msdn.microsoft.com/en-us/library/9cdb5eda(v=VS.100).aspx

如果你遵循这些步骤,你应该做得很好。