Метод установки не вызывается в проекте установки c # - PullRequest
1 голос
/ 22 июня 2011

Я работаю на примере msdn в VS08 о том, как создать пользовательский установщик, и я следовал за ним до буквы.Единственное изменение, которое я сделал, было то, что я реализовал код на 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 Ответ

1 голос
/ 29 июня 2011

Я не знаю, как еще ответить на ваш вопрос, кроме того, что этот работает:

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

Если вы выполните эти шаги, вы должны быть хорошими.

...