1).배포 프로젝트 생성
1. 파일 메뉴에서 프로젝트 추가를 가리킨 다음 새 프로젝트를 선택합니다.
2. 새 프로젝트 추가 대화 상자의 프로젝트 유형 창에서 설치 및 배포 프로젝트를 선택한 다음 템플릿 창에서 설치 프로젝트를 선택합니다. 이름 상자에 setup1을 입력합니다.
3. 확인을 클릭하여 대화 상자를 닫습니다.
4. 프로젝트가 솔루션 탐색기에 추가되고 파일 시스템 편집기가 열립니다.
5. 속성 창에서 ProductName 속성을 선택하고 Information Management System을 입력합니다.
2) 기본 프로그램 프로젝트의 출력을 배포 프로젝트에 추가합니다.
1. 파일 시스템 편집기에서 응용 프로그램 폴더를 선택합니다. 작업 메뉴에서 추가를 가리킨 다음 프로젝트 출력을 선택합니다.
2. 프로젝트 출력 그룹 추가 대화 상자의 프로젝트 드롭다운 목록에서 프로그램을 선택합니다.
3. 확인을 클릭하여 대화 상자를 닫습니다.
4. 목록에서 기본 출력 및 콘텐츠 파일 그룹을 선택하고 확인을 클릭합니다.
3).설치 프로그램 클래스 생성
1. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 선택합니다.
2. 새 프로젝트 대화 상자의 프로젝트 유형 창에서 Visual Basic 프로젝트를 선택한 다음 템플릿 창에서 클래스 라이브러리를 선택합니다. 이름 상자에 installDB를 입력합니다.
3. "열기"를 클릭하여 대화상자를 닫습니다.
4. 프로젝트 메뉴에서 새 항목 추가를 선택합니다.
5. 새 항목 추가 대화 상자에서 설치 프로그램 클래스를 선택합니다. 이름 상자에 installDB를 입력합니다.
6. 확인을 클릭하여 대화 상자를 닫습니다.
7. 자세한 코드는 첨부되어 있습니다.
4).사용자 정의 설치 대화 상자 만들기
1. 솔루션 탐색기에서 "setup1" 프로젝트를 선택합니다. 보기 메뉴에서 편집기를 가리킨 다음 사용자 인터페이스를 선택합니다.
2. 사용자 인터페이스 편집기에서 설치 아래의 시작 노드를 선택합니다. 작업 메뉴에서 대화 상자 추가를 선택합니다.
3. 추가 대화 상자에서 사용권 계약 대화 상자를 선택한 다음 확인을 클릭하여 대화 상자를 닫습니다.
4. 대화 상자 추가 대화 상자에서 텍스트 상자(A) 대화 상자를 선택한 후 확인을 클릭하여 대화 상자를 닫습니다.
5. 동작 메뉴에서 위로 이동을 선택합니다. 텍스트 상자(A) 대화 상자가 설치 폴더 노드 위에 올 때까지 이 단계를 반복합니다.
6. 속성 창에서 BannerText 속성을 선택하고 데이터베이스 설치를 입력합니다.
7. BodyText 속성을 선택하고 다음을 입력합니다. 설치 프로그램이 대상 컴퓨터에 데이터베이스를 설치합니다.
8. Edit1Label 속성을 선택하고 다음을 입력합니다. 데이터베이스 이름:
9. Edit1Property 속성을 선택하고 CUSTOMTEXTA1을 입력합니다.
10. Edit1Value 속성을 선택하고 dbservers를 입력합니다.
11. Edit2Label 속성을 선택하고 다음을 입력합니다. 서버 이름:
12. Edit2Property 속성을 선택하고 CUSTOMTEXTA2를 입력합니다.
13. Edit2Value 속성을 선택하고 다음을 입력합니다. (local)
14. Edit3Label 속성을 선택하고 다음을 입력합니다.
15. Edit3Value 속성을 선택하고 sa를 입력합니다.
16. Edit3Property 속성을 선택하고 CUSTOMTEXTA3을 입력합니다.
17. Edit4Label 속성을 선택하고 다음을 입력합니다. 비밀번호:
18. Edit4Property 속성을 선택하고 CUSTOMTEXTA4를 입력합니다.
19. Edit2Visible, Edit3Visible 및 Edit4Visible 속성을 선택하고 true로 설정합니다.
5).사용자 정의 작업 생성
1. 솔루션 탐색기에서 "setup1" 프로젝트를 선택합니다. 보기 메뉴에서 편집기를 가리킨 다음 사용자 지정 작업을 선택합니다.
2. 사용자 지정 작업 편집기에서 설치 노드를 선택합니다. 작업 메뉴에서 사용자 지정 작업 추가를 선택합니다.
3. 프로젝트에서 항목 선택 대화 상자에서 응용 프로그램 폴더를 두 번 클릭합니다.
4. "installDB의 기본 출력(활성)" 항목을 선택하고 "확인"을 클릭하여 대화 상자를 닫습니다.
5. 속성 창에서 CustomActionData 속성을 선택하고 "/dbname=[CUSTOMTEXTA1] /server=[CUSTOMTEXTA2] /user=[CUSTOMTEXTA3] /pwd=[CUSTOMTEXTA4] /targetdir="[TARGETDIR]""을 입력합니다.
첨부 파일: /targetdir="[TARGETDIR]"은 설치 후 대상 경로를 installDB 클래스에서 가져오기 위해 이 매개변수를 설정합니다.
6) 패키징 시 제거 기능을 추가합니다.
방법 1:
1. 패키지 프로젝트(일반적으로 c:windowssystem32에 있음)에 msiexec.exe 파일을 추가합니다.
2. 파일 시스템 보기에서 응용 프로그램 폴더를 선택하고 msiexec.exe를 마우스 오른쪽 버튼으로 클릭한 다음 바로 가기 만들기를 선택하고 바로 가기 이름을 "제거"로 바꿉니다.
3. 이 바로가기의 Arguments를 "/x {product id}"로 변경하고, product id의 값은 패키지된 프로젝트의 ProductCode 속성값이 됩니다.
방법 2: (권장)
1. 먼저 설치 패키지를 생성하고 아래에서 사용할 ProductCode를 적어 둡니다(setup1 등 솔루션 탐색기의 루트 디렉터리를 선택한 후 마우스 오른쪽 버튼 클릭으로 속성이 아닌 속성 라벨을 확인합니다).
2. VS.net을 사용하여 새 콘솔 프로그램 uninst.exe 파일을 만듭니다.
'전원 제공자: 집주인
'2000년, XP, 2003년
모듈 제거
서브메인()
Dim myProcess를 프로세스로 사용 = 새 프로세스
System.Environment.OSVersion.ToString.IndexOf("NT 5") 다음
myProcess.Start("msiexec", "/X{2B65D4A9-C146-4808-AB4B-321FB0779559}") '자신의 제품 코드로 변경
종료 조건
myProcess.Close()
서브 끝
최종 모듈
3. 패키지된 프로그램 파일에 콘솔 프로그램의 BIN 디렉터리에 있는 exe 파일을 추가하고, 프로그램 그룹에 uninst.exe에 대한 바로가기를 생성합니다.
installdb.vb 클래스, system.configuration.install.dll에 대한 참조를 추가하려면:
using System;
System.Collections 사용;
System.ComponentModel 사용;
System.Configuration.Install 사용;
System.Reflection 사용;
System.IO 사용;
System.Data 사용;
System.Data.SqlClient 사용;
네임스페이스 설치
{
/// <요약>
/// Installer1에 대한 요약 설명입니다.
/// </summary>
[설치 프로그램 실행(true)]
공용 클래스 Installer1 : System.Configuration.Install.Installer
{
/// <요약>
/// 필수 디자이너 변수입니다.
/// </summary>
개인 System.ComponentModel.Container 구성 요소 = null;
공개설치1()
{
// 이 호출은 디자이너에 의해 요구됩니다.
초기화구성요소();
// TODO: 초기화 구성 요소 호출 후 초기화를 추가합니다.
}
/// <요약>
/// 사용 중인 모든 리소스를 정리합니다.
/// </summary>
보호된 재정의 void Dispose(bool disposing)
{
만약(처분)
{
if(구성 요소 != null)
{
구성요소.Dispose();
}
}
base.Dispose( 처분 );
}
#region 구성요소 디자이너가 생성한 코드
/// <요약>
/// 디자이너는 필수 메서드를 지원합니다. 코드 편집기를 사용하여 수정하지 마세요.
/// 이 메소드의 내용입니다.
/// </summary>
개인 무효 초기화 구성 요소()
{
구성 요소 = 새로운 System.ComponentModel.Container();
}
#endregion
개인 문자열 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;
return reader.ReadToEnd();
}
잡기 (예외예외)
{
Console.Write("GetSql에서:"+ex.Message);
예를 던져;
}
}
개인 무효 ExecuteSql(문자열 DataBaseName,문자열 Sql)
{
SqlConnection sqlConnection1=새 SqlConnection();
sqlConnection1.ConnectionString =string.Format("서버={0}; 사용자 ID={1}; 비밀번호={2}; 데이터베이스=마스터",this.Context.Parameters["서버"],this.Context.Parameters[ "user"],this.Context.Parameters["pwd"]);
System.Data.SqlClient.SqlCommand 명령 = 새로운 System.Data.SqlClient.SqlCommand(Sql,sqlConnection1);
노력하다
{
명령.연결.열기();
Command.Connection.ChangeDatabase(DataBaseName);
Command.ExecuteNonQuery();
}
catch(예외예외)
{
Console.Write("예외 처리기에서 :"+ex.Message);
}
마지막으로
{
명령.연결.닫기();
}
}
보호된 무효 AddDBTable(문자열 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);
}
}
공개 재정의 무효 설치(System.Collections.IDictionary stateSaver)
{
base.Install(stateSaver);
AddDBTable(this.Context.Parameters["dbname"]);
}
}
}
여기에는 데이터베이스의 sql 스크립트인 sql.txt가 있습니다. 물론 osql을 호출하여 sql 스크립트를 실행할 수도 있습니다.
sql.txt 파일은 패키징 시 추가해야 하며, 그렇지 않으면 실행되지 않습니다.
데이터베이스의 mdf 파일과 ldf 파일을 첨부하려면 다음 프로그램을 사용하십시오.
개인 무효 CreateDataBase(문자열 strSql, 문자열 DataName, 문자열 strMdf, 문자열 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();
}
물론 패키징할 때 이 두 데이터베이스 파일도 추가해야 합니다.