1).Erstellen Sie ein Bereitstellungsprojekt
1. Zeigen Sie im Menü „Datei“ auf „Projekt hinzufügen“ und wählen Sie dann „Neues Projekt“ aus.
2. Wählen Sie im Dialogfeld „Neues Projekt hinzufügen“ im Bereich „Projekttypen“ die Option „Installations- und Bereitstellungsprojekte“ und dann im Bereich „Vorlagen“ die Option „Installationsprojekte“ aus. Geben Sie setup1 in das Feld „Name“ ein.
3. Klicken Sie auf OK, um das Dialogfeld zu schließen.
4. Das Projekt wird zum Projektmappen-Explorer hinzugefügt und der Dateisystem-Editor wird geöffnet.
5. Wählen Sie im Eigenschaftenfenster die Eigenschaft ProductName aus und geben Sie Information Management System ein.
2) Fügen Sie die Ausgabe des Hauptprogrammprojekts zum Bereitstellungsprojekt hinzu
1. Wählen Sie im Dateisystem-Editor den Anwendungsordner aus. Zeigen Sie im Menü „Aktionen“ auf „Hinzufügen“ und wählen Sie dann „Projektausgabe“ aus.
2. Wählen Sie im Dialogfeld „Projektausgabegruppe hinzufügen“ in der Dropdown-Liste „Projekt“ Ihr Programm aus.
3. Klicken Sie auf OK, um das Dialogfeld zu schließen.
4. Wählen Sie die Gruppen „Hauptausgabe“ und „Inhaltsdateien“ aus der Liste aus und klicken Sie auf „OK“.
3).Erstellen Sie die Installer-Klasse
1. Zeigen Sie im Menü „Datei“ auf „Neu“ und wählen Sie dann „Projekt“ aus.
2. Wählen Sie im Dialogfeld „Neues Projekt“ im Bereich „Projekttypen“ die Option „Visual Basic-Projekt“ und dann im Bereich „Vorlagen“ die Option „Klassenbibliothek“ aus. Geben Sie installDB in das Feld Name ein.
3. Klicken Sie auf „Öffnen“, um das Dialogfeld zu schließen.
4. Wählen Sie im Menü „Projekt“ die Option „Neues Element hinzufügen“.
5. Wählen Sie im Dialogfeld „Neues Element hinzufügen“ die Option „Installer-Klasse“ aus. Geben Sie installDB in das Feld Name ein.
6. Klicken Sie auf OK, um das Dialogfeld zu schließen.
7. Detaillierter Code ist beigefügt.
4).Erstellen Sie ein benutzerdefiniertes Installationsdialogfeld
1. Wählen Sie im Projektmappen-Explorer das Projekt „setup1“ aus. Zeigen Sie im Menü „Ansicht“ auf „Editor“ und wählen Sie dann „Benutzeroberfläche“ aus.
2. Wählen Sie im User Interface Editor unter Installation den Knoten Startup aus. Wählen Sie im Menü „Aktion“ die Option „Dialog hinzufügen“ aus.
3. Wählen Sie im Dialogfeld „Dialogfeld hinzufügen“ das Dialogfeld „Lizenzvereinbarung“ aus und klicken Sie dann auf „OK“, um das Dialogfeld zu schließen.
4. Wählen Sie im Dialogfeld „Dialogfeld hinzufügen“ das Dialogfeld „Textfeld“ (A) aus und klicken Sie dann auf „OK“, um das Dialogfeld zu schließen.
5. Wählen Sie im Menü „Aktion“ die Option „Nach oben“. Wiederholen Sie diesen Schritt, bis sich das Dialogfeld „Textfeld“ (A) über dem Knoten „Installationsordner“ befindet.
6. Wählen Sie im Eigenschaftenfenster die Eigenschaft BannerText aus und geben Sie Folgendes ein: Datenbank installieren.
7. Wählen Sie die BodyText-Eigenschaft und den Typ aus: Das Installationsprogramm installiert die Datenbank auf dem Zielcomputer
8. Wählen Sie die Eigenschaft Edit1Label aus und geben Sie Folgendes ein: Datenbankname:
9. Wählen Sie die Eigenschaft Edit1Property aus und geben Sie CUSTOMTEXTA1 ein
10. Wählen Sie die Eigenschaft Edit1Value aus und geben Sie Folgendes ein: dbservers
11. Wählen Sie die Eigenschaft Edit2Label aus und geben Sie Folgendes ein: Servername:
12. Wählen Sie die Eigenschaft Edit2Property aus und geben Sie CUSTOMTEXTA2 ein
13. Wählen Sie die Edit2Value-Eigenschaft aus und geben Sie Folgendes ein: (lokal)
14. Wählen Sie die Edit3Label-Eigenschaft aus und geben Sie Folgendes ein: Benutzername:
15. Wählen Sie die Eigenschaft Edit3Value aus und geben Sie Folgendes ein: sa
16. Wählen Sie die Eigenschaft Edit3Property aus und geben Sie CUSTOMTEXTA3 ein
17. Wählen Sie die Edit4Label-Eigenschaft aus und geben Sie Folgendes ein: Passwort:
18. Wählen Sie die Eigenschaft Edit4Property aus und geben Sie CUSTOMTEXTA4 ein
19. Wählen Sie die Eigenschaften Edit2Visible, Edit3Visible und Edit4Visible aus und setzen Sie sie auf true
5).Erstellen Sie benutzerdefinierte Vorgänge
1. Wählen Sie im Projektmappen-Explorer das Projekt „setup1“ aus. Zeigen Sie im Menü „Ansicht“ auf „Editor“ und wählen Sie dann „Benutzerdefinierte Aktionen“ aus.
2. Wählen Sie im Editor für benutzerdefinierte Aktionen den Knoten „Installieren“ aus. Wählen Sie im Menü „Aktionen“ die Option „Benutzerdefinierte Aktion hinzufügen“ aus.
3. Doppelklicken Sie im Dialogfeld „Elemente im Projekt auswählen“ auf Anwendungsordner.
4. Wählen Sie den Punkt „Hauptausgabe von installDB (aktiv)“ und klicken Sie auf „OK“, um das Dialogfeld zu schließen.
5. Wählen Sie im Fenster „Eigenschaften“ die Eigenschaft „CustomActionData“ aus und geben Sie „/dbname=[CUSTOMTEXTA1] /server=[CUSTOMTEXTA2] /user=[CUSTOMTEXTA3] /pwd=[CUSTOMTEXTA4] /targetdir="[TARGETDIR]"“ ein.
Anhang: /targetdir="[TARGETDIR]" ist der Zielpfad nach der Installation. Um den Pfad nach der Installation in der installDB-Klasse zu erhalten, setzen wir diesen Parameter.
6) Deinstallationsfunktion beim Packen hinzufügen:
Methode eins:
1. Fügen Sie die Datei msiexec.exe zum gepackten Projekt hinzu (im Allgemeinen unter c:windowssystem32 zu finden).
2. Wählen Sie den Anwendungsordner in der Dateisystemansicht aus, klicken Sie mit der rechten Maustaste auf msiexec.exe, wählen Sie Verknüpfung erstellen und benennen Sie die Verknüpfung in „Deinstallieren“ um.
3. Ändern Sie die Argumente dieser Verknüpfung in „/x {Produkt-ID}“, und der Wert der Produkt-ID ist der ProductCode-Attributwert des gepackten Projekts.
Methode 2: (empfohlen)
1. Generieren Sie zunächst das Installationspaket und notieren Sie sich den ProductCode (wählen Sie das Stammverzeichnis des Lösungs-Explorers aus, z. B. setup1, und überprüfen Sie dann die Eigenschaftsbezeichnung, nicht die Eigenschaften im Rechtsklick), der unten verwendet wird
2. Verwenden Sie VS.net, um eine neue uninst.exe-Datei für das Konsolenprogramm zu erstellen
'power by: vermieterh
'für 2000,xp,2003
Deinstallation des Moduls
Sub Main()
Dimmen Sie myProcess als Prozess = Neuer Prozess
Wenn System.Environment.OSVersion.ToString.IndexOf("NT 5") Dann
myProcess.Start("msiexec", "/X{2B65D4A9-C146-4808-AB4B-321FB0779559}") 'Ändern Sie Ihren eigenen ProductCode
Ende wenn
myProcess.Close()
Sub beenden
Endmodul
3. Fügen Sie die exe-Datei im BIN-Verzeichnis des Konsolenprogramms zur gepackten Programmdatei hinzu und erstellen Sie eine Verknüpfung zu uninst.exe in der Programmgruppe.
installdb.vb-Klasse, um einen Verweis auf system.configuration.install.dll hinzuzufügen:
using System;
Verwenden von System.Collections;
mit System.ComponentModel;
mit System.Configuration.Install;
Verwenden von System.Reflection;
mit System.IO;
Verwenden von System.Data;
Verwenden von System.Data.SqlClient;
Namespace-Installation
{
/// <Zusammenfassung>
/// Zusammenfassende Beschreibung für Installer1.
/// </summary>
[RunInstaller(true)]
öffentliche Klasse Installer1: System.Configuration.Install.Installer
{
/// <Zusammenfassung>
/// Erforderliche Designervariablen.
/// </summary>
private System.ComponentModel.Container Components = null;
publicInstaller1()
{
// Dieser Aufruf wird vom Designer benötigt.
InitializeComponent();
// TODO: Nach dem InitializeComponent-Aufruf eine beliebige Initialisierung hinzufügen
}
/// <Zusammenfassung>
/// Bereinigen Sie alle verwendeten Ressourcen.
/// </summary>
protected override void Dispose( bool entsorgen)
{
wenn(entsorgen)
{
if(Komponenten != null)
{
Komponenten.Dispose();
}
}
base.Dispose( entsorgen );
}
#region Vom Komponentendesigner generierter Code
/// <Zusammenfassung>
/// Designer unterstützt erforderliche Methoden – verwenden Sie zum Ändern keinen Code-Editor
/// Der Inhalt dieser Methode.
/// </summary>
private void InitializeComponent()
{
Komponenten = neues System.ComponentModel.Container();
}
#endregion
privater String GetSql(string Name)
{
// //OSQL aufrufen, um das Skript auszuführen
//
// 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() ;//Warten auf Ausführung
//
// sqlProcess.Close();
versuchen
{
// Assembly Asm = Assembly.GetExecutingAssembly();
// System.IO.FileInfo FileInfo = new System.IO.FileInfo(Asm.Location);
// string path=FileInfo.DirectoryName+@""+Name ;
string path=this.Context.Parameters["targetdir"]+Name;
FileStream fs=new FileStream(path,FileMode.Open,FileAccess.Read,FileShare.Read);
StreamReader-Reader = new StreamReader(fs,System.Text.Encoding.Default);
//System.Text.Encoding.ASCII;
return reader.ReadToEnd();
}
Catch (Ausnahme ex)
{
Console.Write("In GetSql:"+ex.Message);
ex werfen;
}
}
private void ExecuteSql(string DataBaseName,string Sql)
{
SqlConnection sqlConnection1=new SqlConnection();
sqlConnection1.ConnectionString =string.Format("server={0}; Benutzer-ID={1}; Passwort={2}; Datenbank=master",this.Context.Parameters["server"],this.Context.Parameters[ "user"],this.Context.Parameters["pwd"]);
System.Data.SqlClient.SqlCommand Command = new System.Data.SqlClient.SqlCommand(Sql,sqlConnection1);
versuchen
{
Command.Connection.Open();
Command.Connection.ChangeDatabase(DataBaseName);
Command.ExecuteNonQuery();
}
Catch (Ausnahme ex)
{
Console.Write("Im Ausnahmehandler:"+ex.Message);
}
Endlich
{
Command.Connection.Close();
}
}
protected void AddDBTable(string strDBName)
{
versuchen
{
ExecuteSql("master","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 (Ausnahme ex)
{
Console.Write("Im Ausnahmehandler:"+ex.Message);
}
}
öffentliche Überschreibung void Install(System.Collections.IDictionary stateSaver)
{
base.Install(stateSaver);
AddDBTable(this.Context.Parameters["dbname"]);
}
}
}
Es gibt hier sql.txt, das ist das SQL-Skript der Datenbank. Natürlich können Sie osql aufrufen, um das SQL-Skript auszuführen.
Die Datei sql.txt muss beim Packen hinzugefügt werden, andernfalls wird sie nicht ausgeführt.
Wenn Sie die MDF-Datei und die LDF-Datei der Datenbank anhängen möchten, verwenden Sie das folgende Programm:
private void CreateDataBase(string strSql,string DataName,string strMdf,string strLdf)
{
String str;
SqlConnection myConn = new SqlConnection (strSql);
//EXEC sp_detach_db @dbname = 'BX_FreightMileage_2'//Sie müssen zuerst die Datenbank trennen
str = "EXEC sp_attach_db @dbname = '"+ DataName +"', @filename1 = '"+ strMdf +"',@filename2='"+strLdf+"'";
SqlCommand myCommand = new SqlCommand(str, myConn);
myConn.Open();
myCommand.ExecuteNonQuery();
myConn.Close();
}
Natürlich müssen diese beiden Datenbankdateien auch beim Packen hinzugefügt werden.