VS08でmsdn exampleを使用してカスタムインストーラを作成する方法を説明しています。私が行った唯一の変更は、VBではなくC#でコードを実装したことでした。エラーなしでコンパイルしてインストールするように見えますが、上書きされたインストールメソッドが呼び出されていないため、インストールされているものはありません。インストール方法がC#インストールプロジェクトで呼び出されていない
この問題の調査中に私がオンラインで読んだことから、アンインストール方法を呼び出す際に問題が発生していることがわかりましたが、インストール方法はうまくいきます。私は誤って私を助けるかもしれないと思っているそれらの提案のいくつかに従うことにしたので、私のコードは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コマンドが呼び出されることはありません。ちょうど楽しみのために、私もデータベースがインストーラによって認識されていて何もなかったかどうかを検出するためにトレースを実行しました。
ご協力いただければ幸いです!
ありがとうございました!私が間違っていたことはわかりませんが、このリンクはもっと役立ちます。 – itslittlejohn