A)展開プロジェクトを作成します。
「ファイル」メニュー1.「アイテムを追加」してから選択するポイント「新規プロジェクト」。
「新しいプロジェクトの追加」ダイアログ・ボックスで、「プロジェクトの種類」ペインの「セットアップと展開プロジェクト」を選択し、「テンプレート」ペインを選択し、「インストールプログラムを。」「名前」ボックスに、型SETUP1。
3.ダイアログボックスを閉じるには、「OK」をクリックします。
4.プロジェクトがソリューションエクスプローラに追加され、ファイルシステムエディタが開きます。
「プロパティ」ウィンドウで5. [商品プロパティ]を選択し、情報管理体制を入力します。
B)メインの展開プロジェクトにプロジェクト出力を追加します。
「ファイルシステムエディタ」では1は、「アプリケーションフォルダ」を選択します。「操作」メニューでは、ポイント選択し、「追加」するための「プロジェクト出力。」
「追加プロジェクト出力グループ」ダイアログ・ボックスで、「プロジェクト」リスト「あなたのプログラム」のドロップダウンを選択します。
3.ダイアログボックスを閉じるには、「OK」をクリックします。
4.リストから「メイン出力」と「コンテンツファイル」グループを選択し、「OK」をクリックします。
C)インストーラクラスを作成します
「ファイル」メニュー、ポイントに「新しい」とし、選択1.「プロジェクト。」
「新規プロジェクト」ダイアログ・ボックスで、中に「テンプレート」ペインを選択し、「プロジェクトの種類」ペイン「のVisual Basicプロジェクト」を選択し、「ライブラリー。」「名前」ボックスで、installDBを入力します。
3.ダイアログボックスを閉じるには、「開く」をクリックしてください。
4.「プロジェクト」メニューから「新規アイテムを追加」を選択します。
5.「セットアップクラスは、」「新しい項目」ダイアログ・ボックスを追加します。「名前」ボックスで、installDBを入力します。
6.ダイアログボックスを閉じるには、「OK」をクリックします。
7.詳細コードが取り付けられています。
D)カスタムセットアップダイアログボックスを作成します。
1. [ソリューションエクスプローラで「SETUP1」プロジェクト。「表示」メニューのポイント「エディタ」で、次に「ユーザーインターフェース」を選択します。
2.ユーザーインターフェイスエディタは、下のノードを「開始」「インストール。」「操作」メニューでは、「ダイアログの追加」を選択します。
、ボックス「ダイアログを追加」、「使用許諾契約」ダイアログ・ボックスを選択し、ダイアログボックスを閉じるには、「OK」をクリックします3.。
4.「テキストボックス(A)」ダイアログ・ボックスを選択し、ダイアログボックスを閉じるには、「OK」をクリックし、ダイアログボックスで「ダイアログを追加します」。
「操作」メニュー5.選択「に移動します。」「テキストボックス(A)」ダイアログノードで「インストールフォルダ」まで、この手順を繰り返します。
「プロパティ」ウィンドウ6.、プロパティを選択し、BannerTextを入力します。データベースをインストールしてください。
7. bodyText当該プロパティとタイプを選択します。インストーラは、ターゲットマシン上でデータベースをインストールします
8. [Edit1Labelプロパティとタイプ:データベース名:
9. [Edit1PropertyプロパティとタイプCUSTOMTEXTA1
10. [Edit1Valueプロパティやタイプ:dbservers
11. [Edit2Labelプロパティと種類:サーバー名:
12. [Edit2PropertyプロパティとタイプCUSTOMTEXTA2
13. [Edit2Valueプロパティとタイプ:(ローカル)
14. [Edit3Labelプロパティとタイプ:ユーザ名:
15. [Edit3Valueプロパティやタイプ:SA
16. [Edit3PropertyプロパティとタイプCUSTOMTEXTA3
17. Edit4Labelプロパティやタイプ:パスワード:
18.選択Edit4PropertyプロパティとタイプCUSTOMTEXTA4
19.選択Edit2Visible、Edit3VisibleとEdit4Visible財産、そしてtrueにそれらを設定します
E)カスタムアクションを作成します
1. [ソリューションエクスプローラで「SETUP1」プロジェクト。「表示」メニューのポイント「エディタ」で、次に「カスタムアクション」を選択します。
2.「インストール」ノードのカスタムアクションエディタを選択します。「操作」メニューで、「カスタムアクションの追加」を選択します。
「プロジェクト内の項目を選択」ダイアログボックスで、ダブルクリックします3.「アプリケーションフォルダ。」
4.「installDB(活動)からのプライマリ出力」を選択し、ダイアログボックスを閉じるには、「OK」をクリックします。
"プロパティ" ウィンドウ5.、CustomActionDataプロパティと種類を選択し、 "/ DBNAME = [CUSTOMTEXTA1] /サーバー= [CUSTOMTEXTA2] /ユーザー= [CUSTOMTEXTA3] / PWD = [CUSTOMTEXTA4] / TARGETDIR =" [TARGETDIR] \ ""。
附属書:/ TARGETDIR =「[TARGETDIR] \」installDBクラスのインストール後にパスを得るために、私たちは、このパラメータを設定している、インストール後にターゲットパスです。
六)は、アンインストール機能のパッケージに参加しました:
#regionコンポーネントデザイナは、コード生成
/// <まとめ>
変更するために、コード・エディタを使用していない- ///所望の設計支援方法
///このメソッドの内容を。
/// </要約>
プライベートボイドのInitializeComponent()
{
コンポーネントSystem.ComponentModel.Container新しい新=();
}
#endregion
保護された無効AddDBTable(文字列strDBName)
{
しようと
{
(+ strDBName "CREATE DATABASEの"、 "マスター")は、ExecuteSQL。
ExecuteSQL(strDBName、GetSql( "sql.txt"));
ExecuteSQL( "マスター"、 "EXEC sp_addloginを'myoamaster'、 'myoamaster'、 ' "+ strDBName +"'、NULL、NULL")。
ExecuteSQL(strDBName、 "EXEC sp_grantdbaccessストアドプロシージャ'myoamaster'、 'myoamaster'");
ExecuteSQL(strDBName、 "EXEC sp_addrolemember 'のdb_owner'、 'myoamaster'");
}
キャッチ(例外例)
{
Console.Write( "例外ハンドラにおいて:" + ex.Message)。
}
}
方法の一つ:
1.追加のファイルは、パッケージングプロジェクトにMSIEXEC.EXE(一般的にはC:\ Windowsはsystem32に\の下の\見つける。)
2.上のファイル・システム・ビューでアプリケーションフォルダを選択し、右クリックします。msiexec.exeを選択しますショートカットを作成して、ショートカットの名前を変更する「アンインストール」を
3.変化の引数は、「/ X {商品ID}」のためのProductCodeプロパティ値ID値製品の包装プロジェクトをショートカット。
1.追加のファイルは、パッケージングプロジェクトにMSIEXEC.EXE(一般的にはC:\ Windowsはsystem32に\の下の\見つける。)
2.上のファイル・システム・ビューでアプリケーションフォルダを選択し、右クリックします。msiexec.exeを選択しますショートカットを作成して、ショートカットの名前を変更する「アンインストール」を
3.変化の引数は、「/ X {商品ID}」のためのProductCodeプロパティ値ID値製品の包装プロジェクトをショートカット。
方法二:(推奨)
インストールパッケージへの1氏は、製品コード(ソリューションエクスプローラに注意して、以下の使用、)SETUP1としてルートディレクトリを選択し、ラベル、ではない財産権のプロパティを表示
2. VS.netを新しいコンソールアプリケーションUNINST.EXEファイルの確立
「による電力:landlordh
」2000、XP、2003
モジュールのアンインストール
をSub Main()
の薄暗いmyProcessプロセス=新しいプロセスとして
もしSystem.Environment.OSVersion.ToString.IndexOf(「NT 5 ")そして
myProcess.Start(" msiexecの"" / {X-2B65D4A9-C146-4808-AB4B-321FB0779559}「)「製品コードを所有する
場合は終了
myProcess.Close()
End Subの
エンドModule1の
3.コンソールプログラムEXEファイルBINディレクトリには、プログラムグループのUNINST.EXEにショートカットを作成し、パッケージのプログラムファイルに追加されます
インストールパッケージへの1氏は、製品コード(ソリューションエクスプローラに注意して、以下の使用、)SETUP1としてルートディレクトリを選択し、ラベル、ではない財産権のプロパティを表示
2. VS.netを新しいコンソールアプリケーションUNINST.EXEファイルの確立
「による電力:landlordh
」2000、XP、2003
モジュールのアンインストール
をSub Main()
の薄暗いmyProcessプロセス=新しいプロセスとして
もしSystem.Environment.OSVersion.ToString.IndexOf(「NT 5 ")そして
myProcess.Start(" msiexecの"" / {X-2B65D4A9-C146-4808-AB4B-321FB0779559}「)「製品コードを所有する
場合は終了
myProcess.Close()
End Subの
エンドModule1の
3.コンソールプログラムEXEファイルBINディレクトリには、プログラムグループのUNINST.EXEにショートカットを作成し、パッケージのプログラムファイルに追加されます
installdb.vbクラス、参照system.configuration.install.dllを追加します。
システムを使用しました。
System.Collectionsを使用しました。
System.ComponentModelを使用しました。
System.Configuration.Installを使用しました。
するSystem.Reflectionを使用しました。
System.IOを使用しました。
System.Dataを使用しました。
System.Data.SqlClientを使用します。
System.Collectionsを使用しました。
System.ComponentModelを使用しました。
System.Configuration.Installを使用しました。
するSystem.Reflectionを使用しました。
System.IOを使用しました。
System.Dataを使用しました。
System.Data.SqlClientを使用します。
インストールの名前空間
{
/// <要約>
/// Installer1要約。
/// </要約>
[をrunInstaller(真の)]
publicクラスInstaller1:System.Configuration.Install.Installer
{
/// <まとめ>
///必要な設計変数。
/// </要約>
プライベートSystem.ComponentModel.Containerコンポーネント= NULL;
{
/// <要約>
/// Installer1要約。
/// </要約>
[をrunInstaller(真の)]
publicクラスInstaller1:System.Configuration.Install.Installer
{
/// <まとめ>
///必要な設計変数。
/// </要約>
プライベートSystem.ComponentModel.Containerコンポーネント= NULL;
Installer1公開は()
{
//この呼び出しは、設計者が必要とされます。
InitializeComponent();
{
//この呼び出しは、設計者が必要とされます。
InitializeComponent();
// TODO:InitializeComponentの呼び出しの後に任意の初期化を追加
}
}
/// <要約>
///は、使用しているすべてのリソースをクリーンアップします。
/// </要約>
ボイド保護オーバーライド廃棄(BOOL処分)
{
IF(配置)
{
IF(コンポーネント= NULL!)
{
あるcomponents.Dispose();
}
}
base.Dispose(配置);
}
///は、使用しているすべてのリソースをクリーンアップします。
/// </要約>
ボイド保護オーバーライド廃棄(BOOL処分)
{
IF(配置)
{
IF(コンポーネント= NULL!)
{
あるcomponents.Dispose();
}
}
base.Dispose(配置);
}
#regionコンポーネントデザイナは、コード生成
/// <まとめ>
変更するために、コード・エディタを使用していない- ///所望の設計支援方法
///このメソッドの内容を。
/// </要約>
プライベートボイドのInitializeComponent()
{
コンポーネントSystem.ComponentModel.Container新しい新=();
}
#endregion
プライベート文字列GetSql(列名)
{
// //调用osqlを执行脚本
//
// System.Diagnostics.Process sqlProcess =新しい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 [ "ユーザ"] 、this.Context.Parameters [ "PWD"]、 "マスター"、this.Context.Parameters [ "TARGETDIR"])。
//
// sqlProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden。
//
// sqlProcess.Start();
//
// sqlProcess.WaitForExit(); //等待执行
//
// sqlProcess.Close();
//アセンブリASM = Assembly.GetExecutingAssembly();
// System.IO.FileInfoのFileInfo =新しいSystem.IO.FileInfo(Asm.Location)。
//文字列の パス= FileInfo.DirectoryName + @ "\" +名 。
文字列パス= this.Context.Parameters [ "TARGETDIR"] +名。
FileStreamをFS =新しいFileStreamを(パス、FileMode.Open、FileAccess.Read、FileShare.Read)。
StreamReaderをリーダー=新しいStreamReaderを(FS、System.Text.Encoding.Default)。
//System.Text.Encoding.ASCII;
reader.ReadToEndを返します();
{
// //调用osqlを执行脚本
//
// System.Diagnostics.Process sqlProcess =新しい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 [ "ユーザ"] 、this.Context.Parameters [ "PWD"]、 "マスター"、this.Context.Parameters [ "TARGETDIR"])。
//
// sqlProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden。
//
// sqlProcess.Start();
//
// sqlProcess.WaitForExit(); //等待执行
//
// sqlProcess.Close();
//アセンブリASM = Assembly.GetExecutingAssembly();
// System.IO.FileInfoのFileInfo =新しいSystem.IO.FileInfo(Asm.Location)。
//文字列の パス= FileInfo.DirectoryName + @ "\" +名 。
文字列パス= this.Context.Parameters [ "TARGETDIR"] +名。
FileStreamをFS =新しいFileStreamを(パス、FileMode.Open、FileAccess.Read、FileShare.Read)。
StreamReaderをリーダー=新しいStreamReaderを(FS、System.Text.Encoding.Default)。
//System.Text.Encoding.ASCII;
reader.ReadToEndを返します();
}
キャッチ(例外例)
{
Console.Write( "GetSqlにおいて:" + ex.Message)。
EXを投げます。
}
}
キャッチ(例外例)
{
Console.Write( "GetSqlにおいて:" + ex.Message)。
EXを投げます。
}
}
プライベートのボイドは、ExecuteSQL(文字列DatabaseNameを、文字列のSQL)
{
SqlConnectionのsqlConnection1 =新しい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();
}
キャッチ(例外例)
{
Console.Write( "例外ハンドラにおいて:" + ex.Message)。
最後に
{
Command.Connection.Close()。
}
}
{
SqlConnectionのsqlConnection1 =新しい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();
}
キャッチ(例外例)
{
Console.Write( "例外ハンドラにおいて:" + ex.Message)。
最後に
{
Command.Connection.Close()。
}
}
保護された無効AddDBTable(文字列strDBName)
{
しようと
{
(+ strDBName "CREATE DATABASEの"、 "マスター")は、ExecuteSQL。
ExecuteSQL(strDBName、GetSql( "sql.txt"));
ExecuteSQL( "マスター"、 "EXEC sp_addloginを'myoamaster'、 'myoamaster'、 ' "+ strDBName +"'、NULL、NULL")。
ExecuteSQL(strDBName、 "EXEC sp_grantdbaccessストアドプロシージャ'myoamaster'、 'myoamaster'");
ExecuteSQL(strDBName、 "EXEC sp_addrolemember 'のdb_owner'、 'myoamaster'");
}
キャッチ(例外例)
{
Console.Write( "例外ハンドラにおいて:" + ex.Message)。
}
}
パブリックオーバーライドボイドインストール(System.Collections.IDictionary stateSaver)
{
base.Install(stateSaver)。
AddDBTable(this.Context.Parameters [ "DBNAME"])。
}
}
}
{
base.Install(stateSaver)。
AddDBTable(this.Context.Parameters [ "DBNAME"])。
}
}
}
ここでsql.txtは、もちろん、あなたが実際には、同じである、SQLスクリプトを実行します。osql呼び出すことができ、データベースのSQLスクリプトがあります。
ファイルがミックスに追加sql.txtしなければならない梱包すると、それが実行されないでしょう。
次のプログラムでのMDF LDFファイルとデータベースファイルを添付したい場合:
プライベートボイドCreateDataBase(ストリングSTRSQL、ストリングDataName、ストリングstrMdf、列strLdf)
{
文字列str。
SqlConnectionのmyConn =新しいSqlConnectionオブジェクト(STRSQL)。
{
文字列str。
SqlConnectionのmyConn =新しいSqlConnectionオブジェクト(STRSQL)。
// EXEC指定@dbname = 'BX_FreightMileage_2' // 最初のデータベースを分離する必要が
STR = "EXEC sp_attach_dbの@dbname = ' " + DataName + " ' @ファイル名1 ='" + strMdf + " ' @ファイル名2 ='" + strLdf + "「";
STR = "EXEC sp_attach_dbの@dbname = ' " + DataName + " ' @ファイル名1 ='" + strMdf + " ' @ファイル名2 ='" + strLdf + "「";
=新しい新しいmyCommand SqlCommandオブジェクトSqlCommandオブジェクト(STR、myConn);
myConn.Open();
myCommand.ExecuteNonQuery();
myConn.Close();
}
もちろん、これら2つのデータベースファイルがミックスに追加するときにもパッケージ化。
myConn.Open();
myCommand.ExecuteNonQuery();
myConn.Close();
}
もちろん、これら2つのデータベースファイルがミックスに追加するときにもパッケージ化。
ます。https://www.cnblogs.com/zhangchenliang/archive/2007/05/06/736721.htmlで再現