1).展開プロジェクトを作成する
1. [ファイル] メニューで [プロジェクトの追加] をポイントし、[新しいプロジェクト] を選択します。
2. [新しいプロジェクトの追加] ダイアログ ボックスで、[プロジェクト タイプ] ペインで [インストールおよび展開プロジェクト] を選択し、次に [テンプレート] ペインで [インストール プロジェクト] を選択します。 [名前] ボックスに「setup1」と入力します。
3. [OK] をクリックしてダイアログ ボックスを閉じます。
4. プロジェクトがソリューション エクスプローラーに追加され、ファイル システム エディターが開きます。
5. 「プロパティ」ウィンドウで、「ProductName」プロパティを選択し、「Information Management System」と入力します。
2) メインプログラムプロジェクトの出力を展開プロジェクトに追加します。
1. ファイル システム エディタで、[アプリケーション フォルダ] を選択します。 [アクション] メニューで [追加] をポイントし、[プロジェクト出力] を選択します。
2. [プロジェクト出力グループの追加] ダイアログ ボックスで、[プロジェクト] ドロップダウン リストから [プログラム] を選択します。
3. [OK] をクリックしてダイアログ ボックスを閉じます。
4. リストから「Main Output」グループと「Content Files」グループを選択し、「OK」をクリックします。
3).インストーラークラスの作成
1. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] を選択します。
2. [新しいプロジェクト] ダイアログ ボックスの [プロジェクトの種類] ペインで [Visual Basic プロジェクト] を選択し、[テンプレート] ペインで [クラス ライブラリ] を選択します。 [名前] ボックスに「installDB」と入力します。
3. 「開く」をクリックしてダイアログボックスを閉じます。
4. 「プロジェクト」メニューから「新しい項目の追加」を選択します。
5. [新しい項目の追加] ダイアログ ボックスで [インストーラー クラス] を選択します。 [名前] ボックスに「installDB」と入力します。
6. [OK] をクリックしてダイアログ ボックスを閉じます。
7. 詳細コードが添付されています。
4).カスタム インストール ダイアログ ボックスの作成
1. ソリューション エクスプローラーで「setup1」プロジェクトを選択します。 [表示] メニューで [エディター] をポイントし、[ユーザー インターフェイス] を選択します。
2. ユーザー インターフェイス エディターで、[インストール] の下の [スタートアップ] ノードを選択します。 [アクション] メニューで、[ダイアログの追加] を選択します。
3. [ダイアログの追加] ダイアログ ボックスで、[使用許諾契約] ダイアログ ボックスを選択し、[OK] をクリックしてダイアログ ボックスを閉じます。
4. [ダイアログの追加] ダイアログ ボックスで、[テキスト ボックス (A)] ダイアログ ボックスを選択し、[OK] をクリックしてダイアログ ボックスを閉じます。
5. [アクション] メニューで、[上へ移動] を選択します。 [テキスト ボックス (A)] ダイアログ ボックスが [インストール フォルダー] ノードの上に表示されるまで、この手順を繰り返します。
6. 「プロパティ」ウィンドウで、「BannerText」プロパティを選択し、「install database」と入力します。
7. BodyText プロパティを選択し、「インストーラはターゲット マシンにデータベースをインストールします」と入力します。
8. Edit1Label プロパティを選択し、「データベース名」と入力します。
9. Edit1Property プロパティを選択し、「CUSTOMTEXTA1」と入力します。
10. Edit1Value プロパティを選択し、「dbservers」と入力します。
11. Edit2Label プロパティを選択し、「サーバー名」と入力します。
12. Edit2Property プロパティを選択し、「CUSTOMTEXTA2」と入力します。
13. Edit2Value プロパティを選択し、次のように入力します: (local)
14. Edit3Label プロパティを選択し、次のように入力します。 username:
15. Edit3Value プロパティを選択し、「sa」と入力します。
16. Edit3Property プロパティを選択し、「CUSTOMTEXTA3」と入力します。
17. Edit4Label プロパティを選択し、「Password:」と入力します。
18. Edit4Property プロパティを選択し、「CUSTOMTEXTA4」と入力します。
19. Edit2Visible、Edit3Visible、および Edit4Visible プロパティを選択し、true に設定します。
5).カスタムオペレーションの作成
1. ソリューション エクスプローラーで「setup1」プロジェクトを選択します。 [表示] メニューで、[エディター] をポイントし、[カスタム アクション] を選択します。
2. カスタム アクション エディターで [インストール] ノードを選択します。 [アクション] メニューで、[カスタム アクションの追加] を選択します。
3. [プロジェクト内の項目の選択] ダイアログ ボックスで、[アプリケーション フォルダー] をダブルクリックします。
4. [installDB からのメイン出力 (アクティブ)] 項目を選択し、[OK] をクリックしてダイアログ ボックスを閉じます。
5. 「プロパティ」ウィンドウで、CustomActionData プロパティを選択し、「/dbname=[CUSTOMTEXTA1] /server=[CUSTOMTEXTA2] /user=[CUSTOMTEXTA3] /pwd=[CUSTOMTEXTA4] /targetdir="[TARGETDIR]"」」と入力します。
添付: /targetdir="[TARGETDIR]" はインストール後のターゲット パスです。 installDB クラスでインストール後のパスを取得するために、このパラメーターを設定します。
6) パッケージ化時にアンインストール機能を追加します。
方法 1:
1. ファイル msiexec.exe をパッケージ化されたプロジェクト (通常は c:windowssystem32 にあります) に追加します。
2. ファイル システム ビューでアプリケーション フォルダーを選択し、msiexec.exe を右クリックして [ショートカットの作成] を選択し、ショートカットの名前を「アンインストール」に変更します。
3. このショートカットの引数を「/x {製品 ID}」に変更します。製品 ID の値は、パッケージ化されたプロジェクトの ProductCode 属性値になります。
方法 2: (推奨)
1. まずインストール パッケージを生成し、ProductCode を書き留めます (setup1 などのソリューション エクスプローラーのルート ディレクトリを選択し、右クリックのプロパティではなくプロパティ ラベルを確認します)。これは以下で使用されます。
2. VS.net を使用して、新しいコンソール プログラム uninst.exe ファイルを作成します。
'power by: 家主
'2000、XP、2003 の場合
モジュールのアンインストール
サブメイン()
myProcess をプロセスとして暗くする = 新しいプロセス
If System.Environment.OSVersion.ToString.IndexOf("NT 5") then
myProcess.Start("msiexec", "/X{2B65D4A9-C146-4808-AB4B-321FB0779559}") '独自の ProductCode に変更します
終了の場合
myProcess.Close()
エンドサブ
エンドモジュール
3. コンソール プログラムの BIN ディレクトリにある exe ファイルをパッケージ化されたプログラム ファイルに追加し、プログラム グループに uninst.exe へのショートカットを作成します。
installdb.vb クラス、system.configuration.install.dll への参照を追加します
。
System.Collections を使用します。
System.ComponentModel を使用します。
System.Configuration.Install を使用します。
System.Reflection を使用します。
System.IO を使用します。
System.Data を使用します。
System.Data.SqlClient を使用します。
名前空間のインストール
{
/// <概要>
/// Installer1 の概要説明。
/// </概要>
[インストーラーの実行(true)]
パブリック クラス Installer1 : System.Configuration.Install.Installer
{
/// <概要>
/// 必須のデザイナー変数。
/// </概要>
プライベート System.ComponentModel.Container コンポーネント = null;
publicInstaller1()
{
// この呼び出しは設計者によって必要とされます。
InitializeComponent();
// TODO: InitializeComponent 呼び出しの後に初期化を追加します。
}
/// <概要>
/// 使用中のすべてのリソースをクリーンアップします。
/// </概要>
protected オーバーライド void Dispose( bool disposing)
{
もし(処分する)
{
if(コンポーネント != null)
{
コンポーネント.Dispose();
}
}
Base.Dispose( 処分 );
#region
コンポーネント デザイナーによって生成されたコード
/// <概要>
/// デザイナーは必要なメソッドをサポートしています - 変更にはコード エディターを使用しないでください
/// このメソッドの内容。
/// </概要>
private void InitializeComponent()
{
コンポーネント = 新しい System.ComponentModel.Container();
}
#エンドリージョン
プライベート文字列 GetSql(文字列名)
{
// //osql を呼び出してスクリプトを実行する
//
// System.Diagnostics.Process sqlProcess = new System.Diagnostics.Process();
//
// sqlProcess.StartInfo.FileName = "osql.exe";
//
// sqlProcess.StartInfo.Arguments = String.Format(" -U {0} -P {1} -d {2} -i {3}db.sql", this.Context.Parameters["user"], this .Context.Parameters["pwd"],"master", this.Context.Parameters["targetdir"]);
//
// sqlProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
//
// sqlProcess.Start();
//
// sqlProcess.WaitForExit() ;// 実行を待機中
//
// sqlProcess.Close();
試す
{
// アセンブリ Asm = Assembly.GetExecutingAssembly();
// System.IO.FileInfo FileInfo = new System.IO.FileInfo(Asm.Location);
// 文字列パス=FileInfo.DirectoryName+@""+Name ;
文字列パス=this.Context.Parameters["targetdir"]+名前;
FileStream fs=new FileStream(パス,FileMode.Open,FileAccess.Read,FileShare.Read);
StreamReader リーダー = new StreamReader(fs,System.Text.Encoding.Default);
//System.Text.Encoding.ASCII;
リーダーを返します。ReadToEnd();
}
catch (例外例)
{
Console.Write("GetSql:"+ex.Message);
元を投げます。
}
}
private void ExecuteSql(string DataBaseName,string SQL)
{
SqlConnection sqlConnection1=new SqlConnection();
sqlConnection1.ConnectionString =string.Format("サーバー={0}; ユーザーID={1}; パスワード={2}; データベース=マスター",this.Context.Parameters["サーバー"],this.Context.Parameters[ "ユーザー"],this.Context.Parameters["pwd"]);
System.Data.SqlClient.SqlCommand コマンド = 新しい System.Data.SqlClient.SqlCommand(Sql,sqlConnection1);
試す
{
Command.Connection.Open();
Command.Connection.ChangeDatabase(DataBaseName);
Command.ExecuteNonQuery();
}
catch(例外例)
{
Console.Write("例外ハンドラー内:"+ex.Message);
}
ついに
{
Command.Connection.Close();
}
protected void AddDBTable(string strDBName
)
{
試す
{
ExecuteSql("マスター","CREATE DATABASE "+ strDBName);
ExecuteSql(strDBName,GetSql("sql.txt"));
ExecuteSql("master","exec sp_addlogin 'myoamaster','myoamaster','"+strDBName+"',Null,Null");
ExecuteSql(strDBName,"EXEC sp_grantdbaccess 'myoamaster', 'myoamaster'");
ExecuteSql(strDBName,"exec sp_addrolemember 'db_owner','myoamaster'");
}
catch(例外例)
{
Console.Write("例外ハンドラー内:"+ex.Message);
}
}
public override void Install(System.Collections.IDictionary stateSaver)
{
Base.Install(stateSaver);
AddDBTable(this.Context.Parameters["dbname"]);
}
}
}
ここにはデータベースの SQL スクリプトである sql.txt があります。もちろん、osql を呼び出して SQL スクリプトを実行することもできます。
sql.txt ファイルはパッケージ化時に追加する必要があります。追加しないと実行されません。
データベースの mdf ファイルと ldf ファイルを添付する場合は、次のプログラムを使用します。
private void CreateDataBase(string strSql,string DataName,string strMdf,string strLdf)
{
文字列 str;
SqlConnection myConn = 新しい SqlConnection (strSql);
//EXEC sp_detach_db @dbname = 'BX_FreightMileage_2'//最初にデータベースを分離する必要があります
str = "EXEC sp_attach_db @dbname = '"+ DataName +"', @filename1 = '"+ strMdf +"',@filename2='"+strLdf+"'";
SqlCommand myCommand = new SqlCommand(str, myConn);
myConn.Open();
myCommand.ExecuteNonQuery();
myConn.Close();
}
もちろん、パッケージ化するときに、これら 2 つのデータベース ファイルも追加する必要があります。