윈도우를 종료
System.Diagnostics.Process.Start("cmd.exe","ShutDown.exe -s -f -t 00");


윈도우를 재부팅

System.Diagnostics.Process.Start("cmd.exe","ShutDown.exe -r -f -t 00");

 

특정 폴더 열기
System.Diagnostics.Process.Start("explorer.exe", "C:\Temp");

특정 사이트 열기
System.Diagnostics.Process.Start("explorer.exe", "http://www.naver.com");

 

도스명령어 실행

System.Diagnostics.Process.Start("cmd.exe","/c dir");

// cmd 옵션에 대해 더 알고싶으면.. c:>help cmd

 

Process.Start 메서드 사용형식
 

using System.Diagnostics;

//System.Diagnostics 네임스페이스는 시스템 프로세스, 이벤트 로그 및 성능 카운터와 상호 작용할 수 있는 클래스를 제공합니다.

 

public bool Start();
//이 Process 구성 요소의 StartInfo 속성으로 지정된 프로세스 리소스를 시작하거나 다시 사용하여 구성 요소에 연결합니다.

 

Process myProcess = new Process();
string myDocumentsPath =   Environment.GetFolderPath(Environment.SpecialFolder.Personal);
myProcess.StartInfo.FileName = myDocumentsPath + "
\MyFile.doc";
myProcess.StartInfo.Verb = "Print";
myProcess.StartInfo.CreateNoWindow = true;
myProcess.Start();

 

public static Process Start( ProcessStartInfo startInfo);
// ProcessStartInfo : 파일 이름 및 모든 명령줄 인수를 포함하여 프로세스를 시작하는 데 사용되는 정보
// 시작할 프로세스의 파일 이름 같은 프로세스 시작 정보가 포함된 매개 변수에 의해 지정된
// 프로세스 리소스를 시작하고 해당 리소스를 새 Process 구성 요소에 연결합니다

 

ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe");
startInfo.WindowStyle = ProcessWindowStyle.Minimized;
startInfo.Arguments = "
www.naver.com";
Process.Start(startInfo);

 

public static Process Start(string fileName);
// fileName : 프로세스에서 실행될 응용 프로그램 파일 이름입니다.

//문서 또는 응용 프로그램 파일 이름을 지정하여 프로세스 리소스를 시작하고 해당 리소스를 새 Process 구성 요소에 연결합니다

 

Process.Start("IExplore.exe");

 

public static Process Start(string fileName, string arguments);
// arguments : 프로세스를 시작할 때 전달할 명령줄 인수입니다

//응용 프로그램 이름 및 명령줄 인수 집합을 지정하여 프로세스 리소스를 시작하고 해당 리소스를 새 Process 구성 요소에 연결합니다.

 

Process.Start("IExplore.exe", "C:\myPath\myFile.htm");
Process.Start("IExplore.exe", "C:\myPath\myFile.asp");

 

 

Process 클래스

Process 구성 요소는 컴퓨터에서 실행 중인 프로세스에 대한 액세스를 제공합니다. 간단히 말해 프로세스란 실행 중인 응용 프로그램을 말합니다.

 

Process 구성 요소는 응용 프로그램의 시작, 중지, 제어 및 모니터링을 위한 유용한 도구입니다.
Process 구성 요소를 사용하면 실행 중인 프로세스의 목록을 얻거나 새로운 프로세스를 시작할 수 있습니다. 또한 Process 구성 요소를 사용하여 시스템 프로세스에도 액세스할 수 있습니다.
Process 구성 요소를 초기화한 후에는 해당 구성 요소를 사용하여 실행 중인 프로세스에 대한 정보를 얻을 수 있으며 그러한 정보에는 스레드 집합, 로드된 모듈(.dll 및 .exe 파일), 프로세스가 사용하고 있는 메모리 양과 같은 성능 정보 등이 포함됩니다.

 

프로세스 구성 요소는 속성 그룹에 대한 정보를 한 번에 가져옵니다. Process 구성 요소가 특정 그룹의 한 멤버에 대한 정보를 가져올 때 해당 그룹의 나머지 속성 값이 캐싱되므로 Refresh 메서드를 호출하지 않는 한 그룹의 다른 멤버에 대한 새로운 정보를 가져오지 않습니다. 따라서 속성 값이 Refresh 메서드를 마지막으로 호출하여 얻은 속성 값과 같을 수 있습니다. 이러한 그룹 명세는 운영 체제에 따라 다릅니다.

 

더 자세한 사항은 Microsoft Visual Studio .NET 2003 도움말에서 Process 클래스를 참고하세요.

 

 

도스명령수행 프로그램 


 

[전체소스]


using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

using System.Diagnostics;

using System.IO;

using System.Threading;


namespace mouseEvents

{


    public class Form1 : System.Windows.Forms.Form

    {

        private System.Windows.Forms.TextBox textBox1;

        private System.Windows.Forms.Label label2;

        private System.ComponentModel.IContainer components;

        private System.Windows.Forms.TextBox tbComm;

        private System.Windows.Forms.Button btnExec;



        public Form1()

        {

            InitializeComponent();

        }


        protected override void Dispose( bool disposing )

        {

            if( disposing )

            {

                if (components != null)

                {

                    components.Dispose();

                }

            }

            base.Dispose( disposing );

        }


        #region Windows Form Designer generated code

        /// <summary>

        /// Required method for Designer support - do not modify

        /// the contents of this method with the code editor.

        /// </summary>

        private void InitializeComponent()

        {

            this.label2 = new System.Windows.Forms.Label();

            this.tbComm = new System.Windows.Forms.TextBox();

            this.btnExec = new System.Windows.Forms.Button();

            this.textBox1 = new System.Windows.Forms.TextBox();

            this.SuspendLayout();

            //

            // label2

            //

            this.label2.Location = new System.Drawing.Point(8, 8);

            this.label2.Name = "label2";

            this.label2.Size = new System.Drawing.Size(72, 17);

            this.label2.TabIndex = 5;

            this.label2.Text = "도스명령어:";

            //

            // tbComm

            //

            this.tbComm.Location = new System.Drawing.Point(80, 8);

            this.tbComm.Name = "tbComm";

            this.tbComm.Size = new System.Drawing.Size(355, 21);

            this.tbComm.TabIndex = 6;

            this.tbComm.Text = "";

            //

            // btnExec

            //

            this.btnExec.Location = new System.Drawing.Point(440, 8);

            this.btnExec.Name = "btnExec";

            this.btnExec.Size = new System.Drawing.Size(104, 25);

            this.btnExec.TabIndex = 1;

            this.btnExec.Text = "실행";

            this.btnExec.Click += new System.EventHandler(this.button2_Click);

            //

            // textBox1

            //

            this.textBox1.AcceptsReturn = true;

            this.textBox1.AcceptsTab = true;

            this.textBox1.Location = new System.Drawing.Point(8, 32);

            this.textBox1.Multiline = true;

            this.textBox1.Name = "textBox1";

            this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;

            this.textBox1.Size = new System.Drawing.Size(528, 312);

            this.textBox1.TabIndex = 2;

            this.textBox1.Text = "";

            //

            // Form1

            //

            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);

            this.ClientSize = new System.Drawing.Size(547, 350);

            this.Controls.Add(this.tbComm);

            this.Controls.Add(this.label2);

            this.Controls.Add(this.textBox1);

            this.Controls.Add(this.btnExec);

            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;

            this.MaximizeBox = false;

            this.Name = "Form1";

            this.Text = "Process Class";

            this.ResumeLayout(false);


        }

        #endregion


        [STAThread]

        static void Main()

        {

            Application.Run(new Form1());

        }


        private void button2_Click(object sender, System.EventArgs e)

        {

            this.start();

        }


        private void start()

        {


            //Network 변수

            StreamWriter DosWriter;

            StreamReader DosRedaer;

            StreamReader ErrorReader;

           

            //프로세스 생성및 초기화

            Process DosPr = new Process();

           

            ProcessStartInfo psI = new ProcessStartInfo("cmd");

            psI.UseShellExecute = false;

            psI.RedirectStandardInput = true;

            psI.RedirectStandardOutput = true;

            psI.RedirectStandardError = true;

            psI.CreateNoWindow = true;



            //명령 실행

            DosPr.StartInfo = psI;

            DosPr.Start();

            DosWriter = DosPr.StandardInput;

            DosRedaer = DosPr.StandardOutput;

            ErrorReader = DosPr.StandardError;


            DosWriter.AutoFlush = true;


            DosWriter.WriteLine(tbComm.Text);

           

            DosWriter.Close();


            //출력

            textBox1.Text = DosRedaer.ReadToEnd();

            textBox1.Text += ErrorReader.ReadToEnd();


        }

    }

}



  작성자 : HOONS(박경훈)
  이메일 : tajopkh@hanmail.net

출처 : http://www.cyworld.com/nowy/192742

Posted by 나비:D
:

출처 : http://tjstory.tistory.com/120

Visual Studio Setup and Deployment


여기저기 포스트를 뒤져보는데 셋업에 관련한 포스트는 없는 듯 하군요..
못찾는 것인지.. 
제가 사용하는 범위 내에서 셋업 프로젝트에 관해 알아보고자 합니다.
중간 중간 링크되는 URL 은 관련사항에 대한 문서입니다. 대부분이 MSDN 일텐데..
입맛에 안맞으신다거나 좀더 깊히 들어가고 싶으신분들은 참조 하시면 좋겠습니다.
혹 궁금한 사항이 있으시다면 글 남겨주시면 답변 드리겠습니다.

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓

환경 : VS 2008, .Net 2.0

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
프로젝트 생성

MSDN .Net 을 이용하여 설치 패키지를 만드는 방법
http://support.microsoft.com/kb/307353

사용자 삽입 이미지

사용자 삽입 이미지

셋업 프로젝트에서 제공되는 기능들에 대해서는 View 영역에서 확인하실 수 있습니다.

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓

프로젝트 속성
사용자 삽입 이미지
프로젝트 선택후 속성 창의 모습입니다.
[Localization] 은 기본 English 인데 , 이부분을 Korean 으로 바꿔 줍니다.
이부분을 영어로 했을경우 프로젝트내에 한글 인식이 안됩니다.
[Manufacture] 항목은 회사명으로 배포시 설치되는 경로가 됩니다.

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
파일 포함하기
사용자 삽입 이미지
Application Folder : 응용프로그램 설치 폴더에 포함되는 파일들
User's Desktop : 바탕화면에 포함되는 파일들
User's Programs Menu : 시작 메뉴에 포함되는 파일들

[Application Folder]  항목에서 우클릭 메뉴를 확인하면, 파일을 추가 할 수가 있습니다.
이곳에 추가되는 파일들은 설치 응용프로그램 폴더에 포함됩니다.

바로가기 아이콘 만들기
http://support.microsoft.com/kb/307358/
[Application Folder] 에 포함된 파일중 바로가기 아이콘을 생성하고자 하는 실행 파일을 선택합니다.
실행파일 우클릭 메뉴를 확인하시고, 바로가기 아이콘을 생성합니다.
바로가기 아이콘은 같은 카테고리 안에 생성됩니다.
생성된 아이콘을 마우스 드래그 하여 User's Desktop, User's Programs Menu 항목에 추가 할 수 있습니다.
생성된 아이콘의 프로퍼티를 조정하여 Icon을 설정 하실 수 있습니다.
사용자 삽입 이미지
[Icon] [Browser] 클릭하여 Icon  파일을 연결합니다.

설치 경로 셋팅하기
이상태로 빌드를 한후, 설치를 해보게 되면 설치 되는 폴더의 경로가 Program Files \ Default Company로 설정될 것입니다.
이 경로에 대한 설정은 [Application Folder]의 프로퍼티에서 변경 할 수 있습니다.
사용자 삽입 이미지

DefaultLocation의 경로를 보게되면, [Manufacturer] 이라는 부분이 있는데 이부분이 회사명에 해당되는 곳입니다.
[Manufacturer]에 해당되는 곳에 회사 명을 포함하여 설치 경로를 조정할 수 있습니다.
예> [ProgramFilesfolder]MyCompany\[Productname]

여기까지의 진행만으로도 파일과 바로가기가 포함된 간단한 셋업 파일을 만들 수 있겠군요.


〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓

UI Interface
사용자가 응용프로그램을 설치 할 때 보게 되는 다이얼로그의 UI에 해당하는 사항을 설정할 수 있는 부분입니다.
간단하게 메세지를 표현 할 수도 있고, CheckBox 등의 컨트롤을 추가할 수 있습니다.
http://msdn2.microsoft.com/en-us/library/ecaca8zb(VS.80).aspx
사용자 삽입 이미지

트리의 각 항목들의 프로퍼티값을 조정하여 UI를 설정할 수 있습니다. 몇가지만 살펴보면..
[Welcome] CopyrightWarning, WelcomeText 설치 시 첫 페이지에 해당 메세지 들이 표시 됩니다.
[Finished] UpdateText 설치 종료시 표시되는 메세지 입니다.

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
CustomAction

[CustomAction]은 설치 도중 사용자에 의해 행해지는 작업을 의미 합니다.
예를 들어 응용프로그램이 실행 되기 위해서 닷넷 2.0 이 설치 되어 있어야 한다면,
개발자는 배포시에 닷넷 2.0 또한 같이 배포 되길 원할 것입니다.
CustomAction 에는 4개의 카테고리(Install, Commit, Rollback, Uninstall)가 존재합니다.
각 카테고리는 설치 단계를 의미 합니다.

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓

사용자 선택에 따른 조건부 설치 설정

http://msdn.microsoft.com/library/kor/default.asp?url=/library/KOR/vsintro7/html/vxwlkwalkthroughpassingdatatocustomaction.asp

Condition 라는 속성 값을 통해서 프로그램의 배포시에 특정 파일을 포함 시키거나
혹은 특정 CustomAction 을 행하느냐 하지 않느냐를 결정 할 수 있습니다.
사용자 삽입 이미지
Filesystem 에 두개의 임의로 제작한 실행 파일을 등록 하였습니다.

사용자 삽입 이미지

[User Interface] [Start] 우클릭 메뉴에서 2개의 라디오 버튼을 포함하는 다이얼로그를 추가 합니다.
다이얼로그를 Welcome 항목 밑에 위치 시킵니다.
<참조> 모든 사용자 지정 대화 상자는 설치 폴더 대화 상자 또는 웹 설치 프로젝트의 설치 주소 대화 상자 앞에 와야 합니다.

사용자 삽입 이미지

추가된 다이얼로그의 프로퍼티 창 입니다.
두개의 라디오 버튼중 1번째 버튼은 Yes 항목  2번째 버튼은 No 항목으로 설정 하였습니다.
ButtonProperty 프로퍼티의 BUTTON2  값은 변수와 같은 개념으로 이 값을 통해 선택된 라디오 버튼을 확인합니다.
사용자 삽입 이미지

FileSystem 에서 추가한 exe 실행 파일을 Custom Actions 에서 Actions 으로 추가합니다.
추가된 실행 파일의 프로퍼티 창을 보면 Condition 항목을 확인 할 수 있습니다.
사용자 삽입 이미지

Arguments 항목을 /Install 로 설정합니다.
Conditions 항목을 BUTTON2=1 로 설정합니다. 눈치 채셨겠지만 추가된 다이얼로그의 버튼 항목입니다.
BUTTON2 항목이 1값으로 선택되었을 경우 작동 합니다.
그냥 조건문이라 생각하시면 되겠군요
InstallerClass 항목을 False 로 설정 합니다.


사용자 삽입 이미지

Yes 선택시 CustomAction.exe 가 실행되고, No를 선택시 무시 됩니다.
이처럼 사용자의 선택에 따라 Custom Action을 지정할 수 있지만, 또한 응용프로그램에 포함되는 파일을 설치시 추가 제거 할 수 있습니다.
앞전에 FileSystem 에서 추가한 Setup_Application.exe 의 Condition 항목에 BUTTON2=1 이라고 설정하였다면
No를 선택시 CustomAction.exe가 설치 되지 않을 뿐만아니라
설치가 종료되고 해당 폴더를 확인하면 Setup_Application.exe가 포함되지 않았음을 알 수 있습니다.

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
VerSionNT

http://www.tarma.com/support/tin3/0100-using/0035-symbols/0200-variables/versionnt.htm

조건부 설치 항목에서 Condition 속성에 대해서 알아 봤습니다.
Condition 속성을 이용하면 운영체제에 따른 조건부 설치를 진행 할 수 있습니다.
예를 들어 Condition 속성에  VersionNT>=500 값을 설정 합니다.
VersionNT 는 OS 의 버젼에 따른 값으로 아래와 같습니다.
사용자 삽입 이미지

이 표를 볼때 500 이상이라는 값은 Windows 2000 이상의 버젼을 의미 하겠군요

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
.Net의 재배포, 시작조건
http://msdn.microsoft.com/library/kor/default.asp?url=/library/KOR/vsintro7/html/vxwlkwalkthroughpassingdatatocustomaction.asp

배포하려는 프로그램이 .Net의 특정 버젼을 필요로 한다면 개발자는 .Net을  같이 배포 하길 원할 것입니다.
Microsoft Data Access Componets 를 이용하여 시작 조건을 검사 .Net 을 배포 할 수 있습니다.

사용자 삽입 이미지

셋업 프로젝트의 우클릭 메뉴 속성 창을 열어 보면 우측 하단에 Prerequisites 을 발견 할 수 있습니다.
이는 셋업이 진행 되기 전에 필요한 MDAC 를 추가 하는 창으로거 필요한 컴포넌트에 체크를 하시면 됩니다.

체크 박스 리스트 아래 쪽으로 컴포넌트를 다운로드 하는 방법에 대해서 지정할 수 있는데요.
웹을 통해서, 로컬 경로를 통해서 등... 3가지 경우를 선택 할 수 있습니다.

2번째에 위치한 "응용프로그램과 같은 로컬 경로"를 선택 하였습니다.

이렇게 설정하신후 빌드를 하게 되면 셋업 파일 이외에 시작조건에 필요한 컴포넌트들이 포함된 폴더가 생성이 되는군요.

사실 Vista에서 .Net 3.0 은 Windows 기능으로 포함 되어 있어.. 실행 파일 형식으로 제공되는 .Net의 설치는 할 수 없었습니다.
설치를 시도 할경우 경고 메세지를 띄우게 되죠.
빌드후 생성된 파일은 EnableDotNet 이라는 파일이군요. 이 파일은 실제적으로 닷넷을 설치 하는 것이 아니라.
플렛폼에서 닷넷을 사용할 수 있도록.. 설치가 필요하면 설치를.. 혹은 기능의 추가를.. 해주나 봅니다.
그래서!! Vista 에서 무리 없이 동작하는 군요.

현재 MDAC 는 2.1 sp1 버젼까지 업데이트 되어 있군요.

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
시작조건 검사

http://msdn.microsoft.com/library/kor/default.asp?url=/library/KOR/vsintro7/html/vxwlkwalkthroughpassingdatatocustomaction.asp
배포의 시작시에 특정 프로그램의 설치 여부를 확인 할 수 있다면, 이를 확인하여 프로그램을 배포할 수가 있습니다.
WMP11 을 같이 배포 해야 했기에 이에 대해서 알아 보도록 하겠습니다.
[보기][시작조건] 을 클릭 하면 시작 조건 창을 열 수 있습니다.
사용자 삽입 이미지

팝업 메뉴를 보면 파일, 레지스트리, 윈도우 인스톨러, 닷넷, 서비스 등의 시작 조건을 검사 할 수 있습니다.
레지스트리 시작조건을 추가 해보면 [Search Target Machine]  [Luanch Conditions] 에 각각 레스스트리 탐색과, 시작 조건노드가 생성 됩니다.
말그대로 레지스트리 탐색은 레지스트리내 특정 키 값을 할당하고 프로퍼티화 합니다.
생성된 컨디션은 이 프로퍼티의 값을 비교 하여 특정 작업을 시행합니다.

WMP11의 버전을 확인 하여 없을 경우 설치 하는 작업을 진행 해보면..

사용자 삽입 이미지
Root 의 vsdrrHKLM 은 HKEY_LOCAL_MACHINE 를 뜻한다.
RegKey에 검색할 키 값을 채워준다.
Value 에 레지스트리 이름을 준다.
Property 는 외부로 노출되는 변수와 같은 개념으로 특정한 이름을 명명한다.
사용자 삽입 이미지
생선된 컨디션의 Condition 에 방금 생성한 레지스트리 탐색의 프로퍼티 값을 주고 값을 비교합니다.
"11,0,5721,5145"는 필자가 넣은 값으로 WMP11의 XP버젼의 레지스트리 값입니다.
위 조건을 만족하지 않는 경우에 Message 항목을 출력하고 InstallUrl의 경로를 실행합니다.
InstallUrl에 필자는 상대 경로를 주었는데.. 위 폴더는 빌드 Release 에 포함되어 있습니다.
CD 로 배포시에 이런 방법이 유용하고, 실제로 유효한 Web 주소를 주어도 해당 웹페이지를 실행 시켜 줍니다.

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
파일 형식

http://msdn.microsoft.com/library/kor/default.asp?url=/library/KOR/vsintro7/html/vxwlkwalkthroughpassingdatatocustomaction.asp

배포 되는 실행파일에 연결되는 문서 형식을 지정하는 곳입니다.
예를 들어 .hwp 파일을 클릭하면 한글이 실행되듯이..

사용자 삽입 이미지
우측에 [FileType on Target Marchine]의 우클릭 메뉴로 파일 타입을 생성 할 수 있습니다.
좌측은 생성된 파일 타입의 프로퍼티 창입니다.
Extension 란에 확장자를 넣어 주시면 되구요, 세미콜론(;)을 이용하여 여러개를 지정할 수 있습니다.

참고 파일 형식은 설치된 실행 파일 하나에만 연결할 수 있습니다.
두 개 이상의 실행 파일을 파일 형식과 연결하려면 먼저 각 실행 파일에 대한 조건을 지정하여 지정된 설치에 대해 하나만 설치되도록 해야 합니다.

〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
마치며..

제가 직접 해보면서 작성한 포스트라 순서가 순차적이지 않을 수가 있습니다. 이해를 ^^;;
레지스트리 편집기에 대해선 알아보지 않았군요. 사용하진 않았지만 특별히 어려운 사항은 없으리라 생각합니다.
포스트중 제가 잘못 알고 있거나 놓친 부분이 있다면 댓글을 남겨주시면 감사하겠습니다
Posted by 나비:D
:
 Assembly를 COM에 등록 명령어
gacutil : Assembly --> Global Assembly Cache

regasm : Assembly --> Registry

regsvcs : Assembly --> COM+

regsvr32 : 일반컴포넌트 --> Registry
Posted by 나비:D
:



출처 : http://blog.empas.com/bwangel/9314543


원문 : http://www.nullsoft.com/free/nsis/makensis.htm

주로 이용하는 것들 (NSIS/예제1, NSIS/예제2, NSIS/예제3 을 작성할 때 필요한 것 정도의 수준)위주로 정리. 좀 더 자세한 것에 대해서는 원문을 참조.
  1. Installer attributes
    1. General
    2. Install Directory
    3. License Page - 라이센스 관련 페이지에 쓰이는 속성들
    4. Component Page - 설치할 항목을 선택하는 페이지에 쓰이는 속성들
    5. Directory Page - 설치할 디렉토리를 선택하는 페이지에 쓰이는 속성들
    6. Install Page - 실질적인 Install 화면을 표시하는 페이지에 쓰이는 속성들
    7. Uninstall
  2. Compiler Flags
  3. Section
  4. Function (함수)
    1. 유의 사항
    2. attribute
  5. Labels
  6. Instructions
    1. Basic
    2. Registry/INI
    3. Advanced
    4. Branching/etc
    5. File/directory i/o
    6. Misc
    7. Strings
    8. Stack
    9. Integers
    10. Reboot
    11. Uninstall
  7. Variables
    1. modifiable variables that are usable in Instructions
    2. constant variables that are usable in Instructions and InstallDir
    3. usable anywhere in a string
  8. Uninstall Section
  9. Callback functions
    1. Install callback
    2. Uninstall callback
  10. Compiler utility commands
  11. Compiler defines / conditional compilation

Installer attributes

General

attribute parameter example 설명
OutFile? "example.exe" 인스톨러의 화일 이름
Name "zp_exam_project" 인스톨러 이름 (보통은 인스톨하려는 프로그램의 이름)
Caption "zeropage" 인스톨러의 titlebar 관련 caption. default는 "Name Setup"
SubCaption? 0 ": 라이센스기록" 인스톨러 각 페이지 관련 부타이틀


0 - License Agreement


1 - Installation Options


2 - Installation Directory


3 - Installing Files


4 - Completed
BrandingText? "ZeroPage Installer System v1.0" 인스톨러 하단부에 보여지는 텍스트
Icon "setup.ico" Installer 의 아이콘. 반드시 32*32*16 color 이여야 한다.
WindowIcon? on | off Icon 을 표시할 것인지 말것인지 결정
BGGradient 000000 308030 FFFFFF 그라데이션 배경화면의 이용. 16진수 RGB값으로 표현


기본인자는 off | topcolor bottomcolor captiontextcolor | notext
MiscButtonText? "이전" "다음" "취소" "닫기" 각 버튼들에 대한 text 설정 (순서대로)
InstallButtonText? "설치 Install 버튼에 대한 text 의 설정

Install Directory

attribute parameter example 설명
InstallDir? $PROGRAMFILESexample 기본 설치 디렉토리
InstallDirRegKey? . .

License Page - 라이센스 관련 페이지에 쓰이는 속성들

attribute parameter example 설명
LicenseText? "인스톨 하기 전 이 문구를 읽어주십시오" "동의합니다" license text 에서의 구체적 문구


인자는 text buttontext. buttontext 가 없으면 기본적으로 "I Agree"
LicenseData? zp_license.txt 해당 license 문구 텍스트가 담긴 화일

Component Page - 설치할 항목을 선택하는 페이지에 쓰이는 속성들

attribute parameter example 설명
ComponentText? "해당 컴포넌트를 골라주세요" 기본인자는 text subtext1 subtext2


component list 관련 표시될 텍스트.
InstType? "Full Install" Install 관련 component type 에 대한 정의. 순서대로 1,2,3,4...8 까지의 번호들이 매겨지며, 이는 추후 SectionIn? 에서 해당 component 에 대한 포함관계시에 적용된다.
EnabledBitmap? enabled.bmp component 선택 관련 체크된 항목 bitmap. 20*20*16 color bmp format.
DisabledBitmap? disabled.bmp component 선택 관련 체크되지 않은 항목 bitmap. 20*20*16 color bmp format.
SpaceTexts? "필요요구용량" "이용가능한용량" "Space required:", "Space available:" 에 대한 표현 관련 텍스트

Directory Page - 설치할 디렉토리를 선택하는 페이지에 쓰이는 속성들

attribute parameter example 설명
DirShow? show 디렉토리 설정 화면 표시여부
DirText? "설치할 디렉토리를 골라주십시오" "인스톨할 디렉토리설정" "폴더탐색" 디렉토리 선택 페이지에서의 각각 문구들의 설정.
AllowRootDirInstall? false 루트디렉토리에 설치할 수 있도록 허용할것인지에 대한 여부

Install Page - 실질적인 Install 화면을 표시하는 페이지에 쓰이는 속성들

attribute parameter example 설명
InstallColors? FFFF00 000000 foregroundcolor backgroundcolor. 또는 /windows 옵션을 이용가능
InstProgressFlags? smooth colored smooth, colored. colored 를 설정시는 InstallColors? 의 색으로 적용
AutoCloseWindow? false 인스톨 완료시 자동으로 인스톨 윈도우를 닫을것인지에 대한 여부
ShowInstDetails? show hide | show | nevershow . install 되는 화면을 보여줄 것인지에 대한 여부
DetailsButtonText? "Show Details" "Show details" 버튼의 text 에 대한 설정
CompletedText? "완료되었습니다" "Completed" 문구 text에 대한 설정

Uninstall

Uninstall 화면에 대한 설정들.
attribute parameter 설명
UninstallText? text subtext? .
UninstallIcon? path_to_icon.ico 32*32*16 color icon
UninstallCaption? caption .
UninstallSubCaption? page_number subcaption 0: Confirmation, 1:Uninstalling Files, 2:Completed
ShowUninstDetails? hide | show | nevershow .
UninstallButtonText? button text? .

Compiler Flags

Section

Section 은 설치를 위한 일종의 하나의 모듈, 컴포넌트이다. Section 과 InstType? 은 다르다.
InstType? 하나당 여러개의 Section 묶음으로 되어있는 것이다. 사용자는 각각의 Section 에 대해 활성/비활성화 함으로서 설치될 모듈들을 고를 수 있다.
단, Uninstall Section은 언인스톨을 위한 특수한 Section이다.
attribute parameter example 설명
Section "ZPTest Defaults Modules (required)" Section 의 시작을 알린다. Section의 이름을 설정. 만일 Section의 이름이 비어있거나 '-'로 시작되는 경우에는 사용자가 선택할 수 없고, 볼 수도 없다. (즉, 반드시 필요한 Section에 대해). 그리고 가장 처음으로 선언되는 Section은 default Section이 되며 역시 필수 Section이 된다.
SectionIn? 123 or 1-2-3 위에 적은 InstType? 에 포함되는 Type의 번호를 넣는다.
SectionEnd?
Section의 끝을 알리는 attribute
SectionDivider? " additional utilities " 각 Section 간 절취선. 중간에 text 넣기 가능
AddSize? 1000 kb 단위. 각 Section당 필요한 용량에 대해 적어준다.

Function (함수)

유의 사항

attribute

Function function_name 하당 함수이름으로 함수 선언
FunctionEnd?
함수의 끝을 알린다.

Labels

Label은 Goto 명령어나 기타 조건제어문들 (IfErrors?, MessageBox?, IfFileExists?, StrCmp? 등)을 위해 이용한다.
Label 은 반드시 Section 이나 Function 내에 존재해야 한다. Label 은 해당 Section 과 Function 내에서만 그 범위를 가진다.
선언은 간단하다.
MyLabel: 

Instructions

Basic

Instruction parameter 설명
SetOutPath? outpath output path를 설정한뒤 ($OUTDIR), 만일 해당 path가 존재하지 않으면 만든다. 반드시 full-pathname 이여야 하며 일반적으로 $INSTDIR 이 이용된다.
File (/r? file|wildcard ...?) | /oname=file.data infile.dat 해당 output path ($OUTDIR)에 화일들을 추가한다. 와일드카드 (?, *) 등을 이용할 수 있다. 만일 /r 옵션을 이용할 경우, 해당 화일들와 디렉토리들이 재귀적으로 추가된다. (rm -rf의 'r' 옵션의 의미를 생각하길)
Exec command 특정 프로그램을 실행하고 계속 다음진행을 한다. $OUTDIR 은 작업디렉토리로 이용된다. ex) Exec '"$INSTDIRcommand.exe" parameters'
ExecWait? command user_var(exit code)? 특정 프로그램을 실행시키고, 종료될 때까지 기다린다.
ExecShell? action command parameters? SW_SHOWNORMAL | SW_SHOWMAXIMIZED | SW_SHOWMINIMIZED? ShellExecute?를 이용, 프로그램을 실행시킨다. action은 보통 'open', 'print' 등을 말한다. $OUTDIR 은 작업디렉토리로 이용된다.
Rename /REBOOTOK? source_file dest_file 화일이름을 변경한다. (또는 Move 한다.)
Delete /REBOOTOK? file 화일을 삭제한다. 와일드카드 사용가능.
RMDir /r? directory 해당 디렉토리를 지운다. (full-path여야함)

Registry/INI

WriteRegStr? root_key subkey key_name value 레지스트리에 기록. root키의 경우 다음이 가능. HKCR - HKEY_CLASSES_ROOT


HKLM - HKEY_LOCAL_MACHINE


HKCU - HKEY_CURRENT_USER


HKU - HKEY_USERS


HKCC - HKEY_CURRENT_CONFIG


HKDD - HKEY_DYN_DATA


HKPD - HKEY_PERFORMANCE_DATA
WriteRegExpandStr? . .
WriteReg?DWORD . .
WriteRegBin? . .
WriteINIStr ini_filename section_name entry_name value ini 화일에 기록. section_name? entry_name=value 식으로 저장됨
ReadRegStr? . .
ReadReg?DWORD . .
ReadINIStr . .
ReadEnvStr? . .
ExpandEnvStrings? . .
DeleteRegValue? . .
DeleteRegKey? /ifempty? root_key subkey 레지스트리 키 삭제
EnumRegKey? . .
EnumRegValue? . .
DeleteINISec . .
DeleteINIStr . .

Advanced

CreateDirectory? path_to_create 디렉토리 생성
CopyFiles? . .
SetFileAttributes? . .
CreateShortCut? . .
GetFullPathName? . .
SearchPath? . .
GetTempFileName? . .
CallInst?DLL . .
RegDLL . .
UnReg?DLL . .
GetDllVersion? . .
GetDLLVersionLocal? . .
GetFileTime? . .
GetFileTimeLocal? . .

Branching/etc

Goto . .
Call . .
Return . .
IfErrors? . .
ClearErrors? . .
SetErrors? . .
FindWindow? . .
SendMessage? . .
IsWindow? . .
IfFileExists? . .
MessageBox? . .
StrCmp? . .
IntCmp? . .
IntCmp?U . .
Abort . .
Quit . .
GetFunctionAddress? . .
GetLabelAddress? . .
GetCurrentAddress? . .

File/directory i/o

FindFirst? . .
FindNext? . .
FindClose? . .
FileOpen? . .
FileClose? . .
FileRead? . .
FileWrite? . .
FileReadByte? . .
FileWriteByte? . .
FileSeek? . .

Misc

SetDetailsView? . .
SetDetailsPrint? . .
SetAutoClose? . .
DetailPrint? . .
Sleep . .
BringToFront? . .
HideWindow? . .

Strings

StrCpy? . .
StrLen? . .

Stack

Push . .
Pop . .
Exch . .

Integers

IntOp? . .
IntFmt? . .

Reboot

Reboot . .
IfRebootFlag? . .
SetRebootFlag? . .

Uninstall

  • WriteUninstaller? - uninstller 화일이름 설정. 보통 uninstall.exe 라고 써주면 됨. 단, 레지스트리에 등록시키는 화일과 같아야 한다.

Variables

modifiable variables that are usable in Instructions

constant variables that are usable in Instructions and InstallDir?

  • $PROGRAMFILES - program files 디렉토리. (보통 C:Program Files) 실행시 탐색된다.
  • $DESKTOP - 윈도우 데스트톱 디렉토리 (보통 C:windowsdesktop) 실행시 탐색된다.
  • $EXEDIR - installer 가 실행되는 위치
  • $WINDIR - windows 디렉토리 (보통 C:windows , C:winnt) 실행시 탐색된다.
  • $SYSDIR - windows system 디렉토리 (보통 C:windowssystem, C:winntsystem32) 실행시 탐색된다.
  • $TEMP - 시스템 임시 디렉토리 (보통 C:windowstemp) 실행시 탐색됨.
  • $STARTMENU - 시작메뉴 folder. (CreateShortCut? 을 이용, 시작메뉴에 등록시 유용하다.)
  • $SMPROGRAMS - 시작메뉴 programs folder (보통 $STARTMENUPrograms 대신 이용)
  • $SMSTARTUP - 시작메뉴 programs/startup folder. 즉, '시작프로그램'
  • $QUICKLAUNCH - IE4 이상. 퀵런치
  • $HWNDPARENT - parent window의 HWND 에 대한 10진수값.
  • $$ - '$' 표현시..

usable anywhere in a string

Uninstall Section

        Section "Uninstall" 
Delete $INSTDIRUninst.exe ; delete self (see explanation below why this works)
Delete $INSTDIRmyApp.exe
RMDir $INSTDIR
DeleteRegKey HKLM SOFTWAREmyApp
SectionEnd

Callback functions

Install callback

Uninstall callback

Compiler utility commands

Compiler defines / conditional compilation


Posted by 나비:D
:
출처 : http://www.cipher.pe.kr/tt/cipher/101

NSIS는 이미 알고 있듯이 스크립트로 만들어서 컴파일 하는 과정을 거치게 되어 있다. 아주 복잡한 인스톨 프로그램까지 만들 수 있지만, 천리길도 한 걸음부터라고 가장 기본부터 하나씩 정리해볼 생각이다. 누군가에게 도움이 되기를 바라는 마음도 있지만, 나 자신의 알고 있음을 한번 더 정리하는것도 크니 꾸준하게 정리해서 목표는 현재 곰플레이어 인스톨 하는 수준까지 만드는게 목표이다.

  1. NSIS를 다운 받자
    http://nsis.sourceforge.net/Main_Page

  2. 쓸만한 텍스트 에디터를 사용한다. 내가 생각하기에 제일 쉬운 에디터는 HM NIS Edit이다.
    http://hmne.sourceforge.net/
위의 두 프로그램을 다운 받아서 인스톨 하면 모든 준비는 끝이다. NSIS는 완전 free로 다운 받아서 쓰는데 상용화하는데도 전혀 문제가 없는 프로그램이다. HM NIS Edit 은 무료로 사용할 수도 있고 마음에 들어서 제작자에게 도움을 주고 싶으면 donation 할 수 있는 프로그램이다.

둘 다 인스톨 했으면 HM NIS Edit 을 실행한다. 이제 필요한 스크립트를 만들 준비가 다 되었다. HM NIS Edit의 "파일" 메뉴를 보면 위에서부터 네 개의 메뉴가 있다. 일반적인 에디터와 다르게 "스크립트 작성 마법사"를 사용하면 간단하게 인스톨 프로그램을 작성할 수 있다.
사용자 삽입 이미지
"인스톨-옵션 파일 만들기"는 플러그인을 활용하여 인스톨 중에 사용자로부터 선택을 받아서 인스톨 하는 프로그램을 만들때 사용할 수 있다. 처음에는 그냥 "빈 스크립트 만들기" 메뉴를 이용하여 전체적인 스크립트를 다 만들어 보도록 하겠다.

















1. Commands
NSIS 의 스크립트는 기본적으로 한 줄에 하나의 명령을 쓰게 되어 있다. 즉 한번에 해석되는 것이 한 줄 단위라는 것이다. 일반적으로 C의 경우 세미콜론(;) 단위로 실행되게 되어 있는데, NSIS는 줄 단위로 해석된다고 생각하면 된다. 만약 한 줄에 썼을때 에디터에서 보기도 힘들고 할 경우에는 끊고 싶은 부분에서 back-slash(\)를 쓰면 다음 줄까지 연결해서 해석 한다.
형태는 'command [parameters]' 로 사용한다.
예를 들자면

File "myfile"

와 같이 하면 " " 안에 있는 파일을 인스톨 프로그램에 포함시키면서 실제 인스톨시에는 현재 셋팅된 output 폴더에 인스톨을 한다. command에 대해서는 나중에 좀 더 자세하게 보도록 하겠다.

2. Comments
스크립트 언어 이므로 나중에 안 헷갈리기 위해서 가능한 주석을 달아 놓는게 좋다. 주석의 경우 세 가지 방법으로 주석을 나타낼 수 있다. ; 또는  # 을 사용할 경우 이 두 기호 이후부터 줄 끝까지를 주석으로 해석한다. 만약 한꺼번에 여러 줄을 주석으로 처리해야 할 경우는 C와 똑같은 주석을 쓸 수 있다. 즉 /*     */ 로 여러 줄을 한꺼번에 주석 처리할 수 있는 것이다. 만약 ; 나 # 을 파라메터로 넘겨줘야 할 경우는 "  " 로 감싸면 된다.

3. Plug-ins
NSIS에서 플러그인 이란 자체적으로 제공하지 않는 기능을 사용자가 직접 추가 하기 위한 방법을 제공하는 것이다. 이런 플러그인에 있는 command를 사용하기 위해서는

plugin::command [parameters]

형태로 쓴다. 물론 plugin 이란 실제 플러그인의 이름을 말하는 것이다. 추후 더 자세하게 플러그인에 대해서 볼 경우가 생길 것이다.

4. Numbers
숫자를 파라메터로 넘겨 줄 경우에는 10진수, 8진수(시작을 o로 할 경우), 16진수(시작을 ox)로 넘겨 줄 수 있다.

IntCmp 1 0x1 lbl_equal

5. Strings
문자열을 표시할때는 "와 "로 감싸면 공백을 포함한 문자열을 만들 수 있다. " 대신에 ' 또는 ` 등을 사용할 수 있다. 또한 문자열 안에서 "를 표시하기 위해서는 $\ 를 사용하면 된다.

  1.  
  2. MessageBox MB_OK "$\"A quote from a wise man$\" said the wise man"; "를 문자열 내에 포함
  3.  



문자열내에서 특별히 NSIS에서 변경할 수 없게 만들어 놓은 것들이 있다.
$$      $를 문자열 내에 표시할 경우 사용한다.
$\r    케리지 리턴을 표시한다
$\n    다음 줄을 표시한다.
$\t     탭을 표시한다.
위의 정확한 뜻은 예제를 하면서 한꺼번에 설명하도록 하겠다.

6. Variables
프로그래밍이 가능하므로 변수를 사용할 수 있다. 변수는 항상 시작을 $로 시작해야 한다. 그리고 사용하기전에 선언되어야 한다. 즉 실제로 사용하기전에 Var 라는 Command로 먼저 선언하고 사용해야 한다. Variables에 대해서도 뒤에 좀 더 자세하게 살펴 보겠다.

7. Long commands
명령어를 한 줄에 적다가 너무 길어지면 에디터에서 한 눈에 들어 오지 않으므로 여러 줄에 나누어서 작성하는 경우가 있다. 이럴때는 back-slash(\)를 사용하면 된다. 필요한 연결은 알아서 해준다.

CreateShortCut "$SMPROGRAMS\NSIS\ZIP2EXE project workspace.lnk" \
               "$INSTDIR\source\zip2exe\zip2exe.dsw"
MessageBox MB_YESNO|MB_ICONQUESTION \
                         "Do you want to remove all files in the folder? \
                          (If you have anything you created that you want \
                          to keep, click No)" \
                          IDNO NoRemoveLabel


위에 5번을 보면 주석문에도 \ 를 써서 다음 줄까지 주석문 임을 알릴 수 있지만 헷갈릴 수 있으므로 주석문에는 사용하지 않는게 좋다.

8. Configuration file
뒤에 따로 설명할 기회가 있을때 하겠다.


이상은 NSIS 메뉴얼 중에 Chapter 4 에 있는 Script File Format 이라는 부분에 있는 내용을 설명한 것이다. 이것만 가지고는 도대체 뭘 할지 알 수 없으니 예제를 하나 돌리면서 생각을 해보자

사용자 삽입 이미지

HM NIS Edit(앞으로 일반적으로 에디터라고 하면 이 에디터를 지칭한다) 에 위와 같이 글을 쓰고 나서 저장을 한다. 저장은 원하는 이름으로 저장하면 된다. 위에서 다른 부분은 신경쓰지 말고 현재는 command 중에서 outfile 에 파라메터로 주어진 값이 실제로 만들어지는 인스톨 프로그램이라는 것을 생각하자. 여기서는 "hello world.exe"로 만들었다. Section은 나중에 설명할테니 지금은 저렇게 Section 으로 시작하고 SectionEnd로 끝난다는 것만 기억하면 되겠다.
MessageBox의 경우 위에서 이미 설명한 것을 그대로 복사해서 만들었으니 실제로 실행했을때 어떻게 되는지 한번 보도록 하자. 실행을 하기 위해서는 먼저 컴파일을 하고 실행해야 하므로
사용자 삽입 이미지
아래와 같이 메뉴중에 NSIS 아래에 스크립트 컴파일 을 선택하면 컴파일이 되며, 컴파일 및 실행 을 선택하면 컴파일을 하고 자동으로 실행까지 해 주는 것이다. 일단 먼저 컴파일만 해보면 스크립트 파일을 저장한 폴더에 "hello world.exe" 파일이 생성된 것을 볼 수 있다. 이것을 한번 실행시켜 보자. 실행시키면 아래 그림과 같이 나오는 것을 볼 수 있다.

아래 그림에서 앞쪽에 나온 메시지 박스를 잘 보면 스크립트에서 적어 놓은데로 충실하게 출력을 하고 있는 것을 알 수 있다. 맨 앞에 물음표 아이콘이 바로 MB_ICONQUESTION 으로 지정된 것이며, MB_YESNO 가 버튼에서 예, 아니오 버튼이 나온 것이다. 그리고 문자열로 넘겨준 것들이 에디터에 보기 편하게 세줄로 나눈것이지 실제로 메시지 박스로 넘어 갈때는 한 줄로 해석되는 것을 알 수 있다.
사용자 삽입 이미지


간단하게 스크립트를 작성해서 어떻게 동작하는지를 알아 보았다. NSIS는 공개 소프트웨어라서 많은 사람들이 문서화를 해놓았다. 물론 NSIS 홈페이지에도 많은 문서가 있다. 웹에서 찾아 보면 더 많은 문서를 찾아 볼 수 있을 것이다. 여기에 적는 대부분의 내용은 NSIS에 있는 메뉴얼을 중심으로 필요한 내용만 뽑아서 예제를 많이 넣어서 이해하기 쉽게 적을려고 한다.

다음에는 Variables에 대해서 좀 더 자세하게 알아 보도록 하자.
참, 위에 메시지 박스에 적혀 있는 문자열에 $\r$\n 을 포함하여 어떻게 되는지 한번 보는 것도 좋은 경험이 될듯하다.
Posted by 나비:D
:
NSIS - 설치 스크립트 설명

정말 적기 힘드네요...
물론 이렇게 노가다로 일일히 안해도 됩니다.
HM NIS Edit 라는 스크립트 에디터 툴을 쓰시거나 Venis 라는 툴을 사용하셔도 됩니다.
하지만 한번 만들어 놓은 스크립트는 특별한 스크립트가 들어가지 않는한 변하질 않기 때문에 저 같은 경우 만들어 놓은걸 복사해서 일부분만 고쳐서 사용을 하죠...
아래 설치 스크립트에 대한 부분에 주석을 달아 놓았으니 참고하세요...^^

; 배포 프로그램 이름 지정

!define APPNAME "FreemontEncoder"

; 배포 프로그램의 이름 및 버전 표시 (실제 배포 프로그램 실행 시 화면에 표시되는 이름)

!define APPNAMEANDVERSION "FreemontEncoder 2.0"

<?xml:namespace prefix = o /> 

; Main Install settings

; 프로그램 이름 : 위에미리 정의한 APPNAMEANDVERSION을 지정한다.

Name "${APPNAMEANDVERSION}"

; 기본 설치 경로

InstallDir"$PROGRAMFILES\Freemont\Freemont Encoder"

; 배포 프로그램 정보가 등록될 레지스트리 경로

InstallDirRegKey HKLM"Software\${APPNAME}" ""

; 컴파일 후 배포 프로그램이 출력될 경로 지정

OutFile "C:\FMSSetup.exe"

 

; Modern interface settings

; UI Modern 으로설정한다.

!include "MUI.nsh"

 

; 경고 페이지 및 설치 종료 후 바로 실행할 파일 지정

!define MUI_ABORTWARNING

!define MUI_FINISHPAGE_RUN"$INSTDIR\Freemont Encoder.exe"

 

; 설치 및 삭제 아이콘 지정(주의 : 반드시 설치와 삭제 아이콘은 포멧이 일치해야 한다.)

!define MUI_ICON "res\FMS.ico"

!define MUI_UNICON"res\UnInstall.ico"

 

; 매크로 페이지 삽입

; 환영 메시지 페이지

!insertmacro MUI_PAGE_WELCOME

; 설치 경로 선택 페이지

!insertmacro MUI_PAGE_DIRECTORY

; 설치 상태 페이지 : 설치퍼센트 표시되는 페이지

!insertmacro MUI_PAGE_INSTFILES

; 완료 페이지

!insertmacro MUI_PAGE_FINISH

 

; 삭제 확인 페이지

!insertmacro MUI_UNPAGE_CONFIRM

; 삭제 상태 페이지 : 삭제퍼센트 표시되는 페이지

!insertmacro MUI_UNPAGE_INSTFILES

 

; Set languages (first is default language)

; 설치 시 표시 가능한 언어를 설정한다.

; 처음에 설정한 언어가 기본 언어가 된다.

!insertmacro MUI_LANGUAGE"Korean"

!insertmacro MUI_LANGUAGE"English"

!insertmacro MUI_RESERVEFILE_LANGDLL

 

; 설치 섹션

Section "Freemont Encoder"Section1

 

           ;설치 경로에 동일한 파일 존재 시 덮어씌우라는 의미

           SetOverwriteon

 

           ;파일이 설치될 경로를 위에서 지정한 INSTDIR 로 한다.

           SetOutPath"$INSTDIR\"

           ;INSTDIR 에 설치할 로컬 파일 경로를 지정한다.

           File"C\FMS\release\Freemont Encoder.exe"

           File"C\FMS\release\config.ini"

           ;파일이 설치될 경로를 windows\system32로 한다.

           ;일부 dll 이나 필수 파일 등등

           SetOutPath"$SYSDIR"

           ;windows\system32 에 설치할 로컬 파일 경로를 지정한다.

           File"C\FMS\release\FLogo.ax"

           ;dll 이나 ocx, ax 와 같이 레지스트리에 등록이 필요한 경우 (cmd : regsvr32.exe)

           RegDLL"$SYSDIR\FLogo.ax"

           ;바로 가기를 등록한다.

           ;바탕화면에 바로 가기 등록

           CreateShortCut"$DESKTOP\Freemont Encoder.lnk" "$INSTDIR\FreemontEncoder.exe"

           ;시작 프로그램에 바로 가기 등록

           CreateDirectory"$SMPROGRAMS\Freemont"

           CreateShortCut"$SMPROGRAMS\Freemont\Freemont Encoder\Freemont Encoder.lnk""$INSTDIR\Freemont Encoder.exe"

           CreateShortCut"$SMPROGRAMS\Freemont\Freemont Encoder\Uninstall.lnk""$INSTDIR\uninstall.exe"

SectionEnd

 

; 종료 섹션

Section -FinishSection

           ;종료 섹션은 특별한 일이 없는 이상 아래와 같이 설치하는 프로그램에 대한 정보를 레지스트리에 저장한다.

           WriteRegStrHKLM "Software\${APPNAME}" "" "$INSTDIR"

           WriteRegStrHKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}""DisplayName" "${APPNAME}"

           WriteRegStrHKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}""UninstallString" "$INSTDIR\uninstall.exe"

           WriteUninstaller"$INSTDIR\uninstall.exe"

SectionEnd

 

; Modern install component descriptions

!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN

           !insertmacroMUI_DESCRIPTION_TEXT ${Section1} ""

!insertmacro MUI_FUNCTION_DESCRIPTION_END

 

; 삭제 섹션

Section Uninstall

 

           ;설치 정보 레지스트리를 삭제한다

           DeleteRegKeyHKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}"

           DeleteRegKeyHKLM "SOFTWARE\${APPNAME}"

 

           ;파일 삭제

           ;삭제 파일 삭제

           Delete"$INSTDIR\uninstall.exe"

          

           ;바로 가기 삭제

           Delete"$DESKTOP\Freemont Encoder.lnk"

           Delete"$SMPROGRAMS\Freemont\Freemont Encoder.lnk"

           Delete"$SMPROGRAMS\Freemont\Uninstall.lnk"

 

           ;설치 파일 삭제

           Delete"$INSTDIR\Freemont Encoder.exe"

           Delete"$INSTDIR\config.ini"

           ;windows\system32 에 설치된 파일에 대한 레지스트리 삭제 (cmd : regsvr32/u)

           UnRegDLL"$SYSDIR\FLogo.ax"

           ;레지스트리에서 삭제된 파일 삭제

           Delete"$SYSDIR\FLogo.ax"

 

           ;바로 가기 및 설치 디렉토리 삭제

           RMDir"$SMPROGRAMS\Freemont\Freemont Encoder"

           RMDir"$INSTDIR\"

 

SectionEnd

 

; 배포 프로그램 초기화 함수

Function .onInit

           ;설치 언어 선택 페이지를 표시한다.

           !insertmacroMUI_LANGDLL_DISPLAY

 

FunctionEnd

Posted by 나비:D
:
Table C-1. General
 
Command Shortcut Description
Edit.Copy CTRL-C Copies the currently selected item to the system clipboard.
CTRL-INSERT
Edit.Cut CTRL-X Deletes the currently selected item and moves it to the system clipboard.
SHIFT-DELETE
Edit.CycleClipboardRing CTRL-SHIFT- INS Pastes an item from the Clipboard Ring tab of the Toolbox at the cursor in the file and automatically selects the pasted item. You can cycle through the items on the clipboard by pressing the shortcut keys repeatedly.
CTRL-SHIFT-V
Edit.GoToNextLocation F8 Moves the cursor to the next item, such as a task in the TaskList window or a search match in the Find Results window.
Edit.GoToPreviousLocation SHIFT-F8 Moves the cursor to the previous item in the TaskList window or Find Results window.
Edit.GoToReference SHIFT-F12 Finds a reference to the selected item or the item under the cursor.
Edit.OpenFile CTRL-SHIFT-G Opens the file whose name is under the cursor or is currently selected (e.g., if you use this shortcut in a C++ file when the cursor is on a line with a #include statement, it will open the file being included).
Edit.Paste CTRL-V Inserts the item in the clipboard at the cursor.
SHIFT-INSERT
Edit.Redo CTRL-SHIFT-Z Redoes the previously undone action.
CTRL-Y
SHIFT-ALT-BACKSPACE
Edit.SelectionCancel ESC Closes a menu or dialog, cancels an operation in progress, or places focus in the current document window.
Edit.Undo ALT-BACKSPACE Reverses the last editing action.
CTRL-Z
File.Print CTRL-P Displays the Print dialog.
File.SaveAll CTRL-SHIFT-S Saves all documents and projects.
File.SaveSelectedItems CTRL-S Saves the selected items in the current project (usually whichever source file is currently visible).
Tools.GoToCommandLine CTRL-/ Switches focus to the Find/Command box on the Standard toolbar.
View.NextTask CTRL-SHIFT-F12 Moves to the next task in the TaskList window.
View.PopBrowseContext CTRL-SHIFT-8 Moves backward in the browse history. Available in the object browser or Class View window.
View.ViewCode F7 Switches from a design view to a code view in the editor.
View.ViewDesigner SHIFT-F7 Switches from a code view to a design view in the editor.
View.WebNavigateBack ALT-LEFT ARROW Goes back in the web browser history.
View.WebNavigateForward ALT-RIGHT ARROW Goes forward in the web browser history.
 
Table C-2. Project-related
 
Command Shortcut Description
Build.BuildSolution CTRL-SHIFT-B Builds the solution.
Build.Compile CTRL-F7 Compiles the selected file. C++ projects only—.NET projects do not support compilation of individual files, only whole projects.
File.AddExistingItem SHIFT-ALT-A Displays the Add Existing Item dialog.
File.AddNewItem CTRL-SHIFT-A Displays the Add New Item dialog.
File.BuildandBrowse CTRL-F8 Builds the current project and then displays the start page for the project in the browser. Available only for web projects.
File.NewFile CTRL-N Displays the New File dialog. Files created in this way are not associated with any project. Use File.AddNewItem (Ctrl-Shift-A) to create a new file in a project.
File.NewProject CTRL-SHIFT-N Displays the New Project dialog.
File.OpenFile CTRL-O Displays the Open File dialog.
File.OpenProject CTRL-SHIFT-O Displays the Open Project dialog.
Project.Override CTRL-ALT-INSERT Allows you to override base class methods in a derived class when an overridable method is highlighted in the Class View pane.
 
Table C-3. Window manipulation
 
Command Shortcut Description
View.FullScreen SHIFT-ALT-ENTER Toggles full screen mode.
View.NavigateBackward CTRL-+ Goes back to the previous location in the navigation history. (For example, if you press Ctrl-Home to go to the start of a document, this shortcut will take the cursor back to wherever it was before you pressed Ctrl-Home.)
View.NavigateForward CTRL-SHIFT-+ Moves forward in the navigation history. This is effectively an undo for the View.NavigateBackward operation.
Window.ActivateDocumentWindow ESC Closes a menu or dialog, cancels an operation in progress, or places focus in the current document window.
Window.CloseDocumentWindow CTRL-F4 Closes the current MDI child window.
Window.CloseToolWindow SHIFT-ESC Closes the current tool window.
Window.MoveToDropDownBar CTRL-F2 Moves the cursor to the navigation bar at the top of a code view.
Window.NextDocumentWindow CTRL-TAB Cycles through the MDI child windows one window at a time.
CTRL-F6
Window.PreviousDocumentWindow CTRL-SHIFT-TAB Moves to the previous MDI child window.
CTRL-SHIFT-F6
Window.NextPane ALT-F6 Moves to the next tool window.
Window.PreviousPane SHIFT-ALT-F6 Moves to the previously selected window.
Window.NextSplitPane F6 Moves to the next pane of a split pane view of a single document.
Window.PreviousSplitPane SHIFT-F6 Moves to the previous pane of a document in split pane view.
Window.NextTab CTRL-PAGEDOWN Moves to the next tab in the document or window (e.g., you can use this to switch the HTML editor from its design view to its HTML view.
Window.PreviousTab CTRL-PAGE UP Moves to the previous tab in the document or window.
 
Table C-4. Text navigation
 
Command Shortcut Description
Edit.CharLeft LEFT ARROW Moves the cursor one character to the left.
Edit.CharRight RIGHT ARROW Moves the cursor one character to the right.
Edit.DocumentEnd CTRL-END Moves the cursor to the end of the document.
Edit.DocumentStart CTRL-HOME Moves the cursor to the start of the document.
Edit.GoTo CTRL-G Displays the Go to Line dialog. If the debugger is running, the dialog also lets you specify addresses or function names to go to.
Edit.GoToBrace CTRL-] Moves the cursor to the matching brace in the document. If the cursor is on an opening brace, this will move to the corresponding closing brace and vice versa.
Edit.LineDown DOWN ARROW Moves the cursor down one line.
Edit.LineEnd END Moves the cursor to the end of the current line.
Edit.LineStart HOME Moves the cursor to the beginning of the line. If you press Home when the cursor is already at the start of the line, it will toggle the cursor between the first non-whitespace character and the real start of the line.
Edit.LineUp UP ARROW Moves the cursor up one line.
Edit.NextBookmark CTRL-K, CTRL-N Moves to the next bookmark in the document.
Edit.PageDown PAGE DOWN Scrolls down one screen in the editor window.
Edit.PageUp PAGE UP Scrolls up one screen in the editor window.
Edit.PreviousBookmark CTRL-K, CTRL-P Moves to the previous bookmark.
Edit.QuickInfo CTRL-K, CTRL-I Displays Quick Info, based on the current language.
Edit.ScrollLineDown CTRL-DOWN ARROW Scrolls text down one line but does not move the cursor. This is useful for scrolling more text into view without losing your place. Available only in text editors.
Edit.ScrollLineUp CTRL-UP ARROW Scrolls text up one line but does not move the cursor. Available only in text editors.
Edit.WordNext CTRL-RIGHT ARROW Moves the cursor one word to the right.
Edit.WordPrevious CTRL-LEFT ARROW Moves the cursor one word to the left.
View.BrowseNext CTRL-SHIFT-1 Navigates to the next definition, declaration, or reference of an item. Available in the object browser and Class View window. Also available in source editing windows if you have already used the Edit.GoToReference (Shift-F12) shortcut.
View.BrowsePrevious CTRL-SHIFT-2 Navigates to the previous definition, declaration, or reference of an item.
 
Table C-5. Text manipulation
 
Command Shortcut Description
Edit.BreakLine ENTER Inserts a new line.
SHIFT-ENTER
Edit.CharTranspose CTRL-T Swaps the characters on either side of the cursor. (For example, AC|BD becomes AB|CD.) Available only in text editors.
Edit.ClearBookmarks CTRL-K, CTRL-L Removes all unnamed bookmarks in the current document.
Edit.CollapseToDefinitions CTRL-M, CTRL-O Automatically determines logical boundaries for creating regions in code, such as procedures, and then hides them. This collapses all such regions in the current document.
Edit.CommentSelection CTRL-K, CTRL-C Marks the current line or selected lines of code as a comment, using the correct comment syntax for the programming language.
Edit.CompleteWord ALT-RIGHT ARROW Displays statement completion based on the current language or autocompletes word if existing text unambiguously identifies a single symbol.
CTRL-SPACEBAR
Edit.Delete DELETE Deletes one character to the right of the cursor.
Edit.DeleteBackwards BACKSPACE Deletes one character to the left of the cursor.
SHIFT-BACKSPACE
Edit.DeleteHorizontalWhitespace CTRL-K, CTRL-\ Removes horizontal whitespace in the selection or deletes whitespace adjacent to the cursor if there is no selection.
Edit.FormatDocument CTRL-K, CTRL-D Applies the indenting and space formatting for the language as specified on the Formatting pane of the language in the Text Editor section of the Options dialog to the document. This shortcut is available only in VB.NET—in other languages you must first select the whole document with Ctrl-A and then format the selection with Ctrl-K, Ctrl-F.
Edit.FormatSelection CTRL-K, CTRL-F Applies the indenting and space formatting for the language as specified on the Formatting pane of the language in the Text Editor section of the Options dialog to the selected text.
Edit.HideSelection CTRL-M, CTRL-H Hides the selected text. A signal icon marks the location of the hidden text in the file. VB.NET only.
Edit.InsertTab TAB Indents the currently selected line or lines by one tab stop. If there is no selection, this inserts a tab stop.
Edit.LineCut CTRL-L Cuts all selected lines or the current line if nothing has been selected to the clipboard.
Edit.LineDelete CTRL-SHIFT-L Deletes all selected lines or the current line if no selection has been made.
Edit.LineOpenAbove CTRL-ENTER Inserts a blank line above the cursor.
Edit.LineOpenBelow CTRL-SHIFT-ENTER Inserts a blank line below the cursor.
Edit.LineTranspose SHIFT-ALT-T Moves the line containing the cursor below the next line.
Edit.ListMembers CTRL-J Lists members for statement completion when editing code.
Edit.MakeLowercase CTRL-U Changes the selected text to lowercase characters.
Edit.MakeUppercase CTRL-SHIFT-U Changes the selected text to uppercase characters.
Edit.OverTypeMode INSERT Toggles between insert and overtype insertion modes.
Edit.ParameterInfo CTRL-SHIFT-SPACEBAR Displays a tooltip that contains information for the current parameter, based on the current language.
Edit.StopHidingCurrent CTRL-M, CTRL-U Removes the outlining information for the currently selected region.
Edit.StopOutlining CTRL-M, CTRL-P Removes all outlining information from the entire document.
Edit.SwapAnchor CTRL-R, CTRL-P Swaps the anchor and endpoint of the current selection.
Edit.TabLeft SHIFT-TAB Moves current line or selected lines one tab stop to the left.
Edit.ToggleAllOutlining CTRL-M, CTRL-L Toggles all previously marked hidden text sections between hidden and display states.
Edit.ToggleBookmark CTRL-K, CTRL-K Sets or removes a bookmark at the current line.
Edit.ToggleOutliningExpansion CTRL-M, CTRL-M Toggles the currently selected hidden text section or the section containing the cursor if there is no selection between the hidden and display states.
Edit.ToggleTaskListShortcut CTRL-K, CTRL-H Sets or removes a shortcut in the tasklist to the current line.
Edit.ToggleWordWrap CTRL-R, CTRL-R Enables or disables word wrap in an editor.
Edit.UncommentSelection CTRL-K, CTRL-U Removes the comment syntax from the current line or currently selected lines of code.
Edit.ViewWhiteSpace CTRL-R, CTRL-W Shows or hides spaces and tab marks.
Edit.WordDeleteToEnd CTRL-DELETE Deletes the word to the right of the cursor.
Edit.WordDeleteToStart CTRL-BACKSPACE Deletes the word to the left of the cursor.
Edit.WordTranspose CTRL-SHIFT-T Transposes the two words that follow the cursor. (For example, |End Sub would be changed to read Sub End|.)
 
Table C-6. Text selection
 
Command Shortcut Description
Edit.CharLeftExtend SHIFT-LEFT ARROW Moves the cursor to the left one character, extending the selection.
Edit.CharLeftExtendColumn SHIFT-ALT-LEFT ARROW Moves the cursor to the left one character, extending the column selection.
Edit.CharRightExtend SHIFT-RIGHT ARROW Moves the cursor to the right one character, extending the selection.
Edit.CharRightExtendColumn SHIFT-ALT-RIGHT ARROW Moves the cursor to the right one character, extending the column selection.
Edit.DocumentEndExtend CTRL-SHIFT-END Moves the cursor to the end of the document, extending the selection.
Edit.DocumentStartExtend CTRL-SHIFT-HOME Moves the cursor to the start of the document, extending the selection.
Edit.GoToBraceExtend CTRL-SHIFT-] Moves the cursor to the next brace, extending the selection.
Edit.LineDownExtend SHIFT-DOWN ARROW Moves the cursor down one line, extending the selection.
Edit.LineDownExtendColumn SHIFT-ALT-DOWN ARROW Moves the cursor down one line, extending the column selection.
Edit.LineEndExtend SHIFT-END Moves the cursor to the end of the current line, extending the selection.
Edit.LineEndExtendColumn SHIFT-ALT-END Moves the cursor to the end of the line, extending the column selection.
Edit.LineStartExtend SHIFT-HOME Moves the cursor to the start of the line, extending the selection.
Edit.LineStartExtendColumn SHIFT-ALT-HOME Moves the cursor to the start of the line, extending the column selection.
Edit.LineUpExtend SHIFT-UP ARROW Moves the cursor up one line, extending the selection.
Edit.LineUpExtendColumn SHIFT-ALT-UP ARROW Moves the cursor up one line, extending the column selection.
Edit.PageDownExtend SHIFT-PAGE DOWN Extends selection down one page.
Edit.PageUpExtend SHIFT-PAGE UP Extends selection up one page.
Edit.SelectAll CTRL-A Selects everything in the current document.
Edit.SelectCurrentWord CTRL-W Selects the word containing the cursor or the word to the right of the cursor.
Edit.SelectToLastGoBack CTRL-= Selects from the current location in the editor back to the previous location in the navigation history.
Edit.ViewBottomExtend CTRL-SHIFT-PAGE DOWN Moves the cursor to the last line in view, extending the selection.
Edit.ViewTopExtend CTRL-SHIFT-PAGE UP Moves the cursor to the top of the current window, extending the selection.
Edit.WordNextExtend CTRL-SHIFT-RIGHT ARROW Moves the cursor one word to the right, extending the selection.
Edit.WordNextExtendColumn CTRL-SHIFT-ALT-RIGHT ARROW Moves the cursor to the right one word, extending the column selection.
Edit.WordPreviousExtend CTRL-SHIFT-LEFT ARROW Moves the cursor one word to the left, extending the selection.
Edit.WordPreviousExtendColumn CTRL-SHIFT-ALT-LEFT ARROW Moves the cursor to the left one word, extending the column selection.
 
Table C-7. Control editor (designer)
 
Command Shortcut Description
Edit.MoveControlDown CTRL-DOWN ARROW Moves the selected control down in increments of one on the design surface.
Edit.MoveControlDownGrid DOWN ARROW Moves the selected control down to the next grid position on the design surface.
Edit.MoveControlLeft CTRL-LEFT ARROW Moves the control to the left in increments of one on the design surface.
Edit.MoveControlLeftGrid LEFT ARROW Moves the control to the left to the next grid position on the design surface.
Edit.MoveControlRight CTRL-RIGHT ARROW Moves the control to the right in increments of one on the design surface.
Edit.MoveControlRightGrid RIGHT ARROW Moves the control to the right into the next grid position on the design surface.
Edit.MoveControlUp CTRL-UP ARROW Moves the control up in increments of one on the design surface.
Edit.MoveControlUpGrid UP ARROW Moves the control up into the next grid position on the design surface.
Edit.SelectNextControl TAB Moves to the next control in the tab order.
Edit.SelectPreviousControl SHIFT-TAB Moves to the previous control in the tab order.
Edit.SizeControlDown CTRL-SHIFT-DOWN ARROW Increases the height of the control in increments of one on the design surface.
Edit.SizeControlDownGrid SHIFT-DOWN ARROW Increases the height of the control to the next grid position on the design surface.
Edit.SizeControlLeft CTRL-SHIFT-LEFT ARROW Reduces the width of the control in increments of one on the design surface.
Edit.SizeControlLeftGrid SHIFT-LEFT ARROW Reduces the width of the control to the next grid position on the design surface.
Edit.SizeControlRight CTRL-SHIFT-RIGHT ARROW Increases the width of the control in increments of one on the design surface.
Edit.SizeControlRightGrid SHIFT-LEFT ARROW Increases the width of the control to the next grid position on the design surface.
Edit.SizeControlUp CTRL-SHIFT-UP ARROW Decreases the height of the control in increments of one on the design surface.
Edit.SizeControlUpGrid SHIFT-UP ARROW Decreases the height of the control to the next grid position on the design surface.
 
Table C-8. Search and replace
 
Command Shortcut Description
Edit.Find CTRL-F Displays the Find dialog.
Edit.FindInFiles CTRL-SHIFT-F Displays the Find in Files dialog.
Edit.FindNext F3 Finds the next occurrence of the previous search text.
Edit.FindNextSelected CTRL-F3 Finds the next occurrence of the currently selected text or the word under the cursor if there is no selection.
Edit.FindPrevious SHIFT-F3 Finds the previous occurrence of the search text.
Edit.FindPreviousSelected CTRL-SHIFT-F3 Finds the previous occurrence of the currently selected text or the word under the cursor.
Edit.GoToFindCombo CTRL-D Places the cursor in the Find/Command line on the Standard toolbar.
Edit.HiddenText ALT-F3, H Selects or clears the Search Hidden Text option for the Find dialog.
Edit.IncrementalSearch CTRL-I Starts an incremental search—after pressing Ctrl-I, you can type in text, and for each letter you type, VS.NET will find the first occurrence of the sequence of letters you have typed so far. This is a very convenient facility, as it lets you find text by typing in exactly as many characters as are required to locate the text and no more.
If you press Ctrl-I a second time without typing any characters, it recalls the previous pattern. If you press it a third time or you press it when an incremental search has already found a match, VS.NET searches for the next occurrence.
Edit.MatchCase ALT-F3, C. Selects or clears the Match Case option for Find and Replace operations.
Edit.RegularExpression ALT-F3, R Selects or clears the Regular Expression option so that special characters can be used in Find and Replace operations.
Edit.Replace CTRL-H Displays the Replace dialog.
Edit.ReplaceInFiles CTRL-SHIFT-H Displays the Replace in Files dialog.
Edit.ReverseIncrementalSearch CTRL-SHIFT-I Performs an incremental search in reverse direction.
Edit.StopSearch ALT-F3, S Halts the current Find in Files operation.
Edit.Up ALT-F3, B Selects or clears the Search Up option for Find and Replace operations.
Edit.WholeWord ALT-F3, W Selects or clears the Match Whole Word option for Find and Replace operations.
Edit.Wildcard ALT-F3, P Selects or clears the Wildcard option for Find and Replace operations.
 
Table C-9. Help
 
Command Shortcut Description
Help.Contents CTRL-ALT-F1 Displays the Contents window for the documentation.
Help.DynamicHelp CTRL-F1 Displays the Dynamic Help window, which displays different topics depending on what items currently have focus. If the focus is in a source window, the Dynamic Help window will display help topics that are relevant to the text under the cursor.
Help.F1Help F1 Displays a topic from Help that corresponds to the part of the user interface that currently has the focus. If the focus is in a source window, Help will try to display a topic relevant to the text under the cursor.
Help.Index CTRL-ALT-F2 Displays the Help Index window.
Help.Indexresults SHIFT-ALT-F2 Displays the Index Results window, which lists the topics that contain the keyword selected in the Index window.
Help.NextTopic ALT-DOWN ARROW Displays the next topic in the table of contents. Available only in the Help browser window.
Help.PreviousTopic ALT-UP ARROW Displays the previous topic in the table of contents. Available only in the Help browser window.
Help.Search CTRL-ALT-F3 Displays the Search window, which allows you to search for words or phrases in the documentation.
Help.Searchresults SHIFT-ALT-F3 Displays the Search Results window, which displays a list of topics that contain the string searched for from the Search window.
Help.WindowHelp SHIFT-F1 Displays a topic from Help that corresponds to the user interface item that has the focus.
 
Table C-10. Debugging
 
Command Shortcut Description
Debug.ApplyCodeChanges ALT-F10 Starts an edit and continue build to apply changes to code being debugged. Edit and continue is available only in C++ projects.
Debug.Autos CTRL-ALT-V, A Displays the Auto window to view the values of variables currently in the scope of the current line of execution within the current procedure.
Debug.BreakAll CTRL-ALT-Break Temporarily stops execution of all processes in a debugging session. Available only in run mode.
Debug.Breakpoints CTRL-ALT-B Displays the Breakpoints dialog, where you can add and modify breakpoints.
Debug.CallStack CTRL-ALT-C Displays the Call Stack window to display a list of all active procedures or stack frames for the current thread of execution. Available only in break mode.
Debug.ClearAllBreakpoints CTRL-SHIFT-F9 Clears all of the breakpoints in the project.
Debug.Disassembly CTRL-ALT-D Displays the Disassembly window.
Debug.EnableBreakpoint CTRL-F9 Enables or disables the breakpoint on the current line of code. The line must already have a breakpoint for this to work.
Debug.Exceptions CTRL-ALT-E Displays the Exceptions dialog.
Debug.Immediate CTRL-ALT-I Displays the Immediate window, where you can evaluate expressions and execute individual commands.
Debug.Locals CTRL-ALT-V, L Displays the Locals window to view the variables and their values for the currently selected procedure in the stack frame.
Debug.Memory1 CTRL-ALT-M, 1 Displays the Memory 1 window to view memory in the process being debugged. This is particularly useful when you do not have debugging symbols available for the code you are looking at. It is also helpful for looking at large buffers, strings, and other data that does not display clearly in the Watch or Variables window.
Debug.Memory2 CTRL-ALT-M, 2 Displays the Memory 2 window.
Debug.Memory3 CTRL-ALT-M, 3 Displays the Memory 3 window.
Debug.Memory4 CTRL-ALT-M, 4 Displays the Memory 4 window.
Debug.Modules CTRL-ALT-U Displays the Modules window, which allows you to view the .dll or .exe files loaded by the program. In multiprocess debugging, you can right-click and select Show Modules for all programs.
Debug.NewBreakpoint CTRL-B Opens the New Breakpoint dialog.
Debug.QuickWatch CTRL-ALT-Q Displays the Quick Watch dialog with the current value of the selected expression. Available only in break mode. Use this command to check the current value of a variable, property, or other expression for which you have not defined a watch expression.
Debug.Registers CTRL-ALT-G Displays the Registers window, which displays CPU register contents.
Debug.Restart CTRL-SHIFT-F5 Terminates the current debugging session, rebuilds if necessary, and then starts a new debugging session. Available in break and run modes.
Debug.RunningDocuments CTRL-ALT-N Displays the Running Documents window that displays the set of HTML documents that you are in the process of debugging. Available in break and run modes.
Debug.RunToCursor CTRL-F10 Starts or resumes execution of your code and then halts execution when it reaches the selected statement. This starts the debugger if it is not already running.
Debug.SetNextStatement CTRL-SHIFT-F10 Sets the execution point to the line of code you choose.
Debug.ShowNextStatement ALT-NUM * Highlights the next statement to be executed.
Debug.Start F5 If not currently debugging, this runs the startup project or projects and attaches the debugger. If in break mode, this allows execution to continue (i.e., it returns to run mode).
Debug.StartWithoutDebugging CTRL-F5 Runs the code without invoking the debugger. For console applications, this also arranges for the console window to stay open with a "Press any key to continue" prompt when the program finishes.
Debug.StepInto F11 Executes code one statement at a time, tracing execution into function calls.
Debug.StepOut SHIFT-F11 Executes the remaining lines of a function in which the current execution point lies.
Debug.StepOver F10 Executes the next line of code but does not step into any function calls.
Debug.StopDebugging SHIFT-F5 Available in break and run modes, this terminates the debugging session.
Debug.This CTRL-ALT-V, T Displays the This window, which allows you to view the data members of the object associated with the current method.
Debug.Threads CTRL-ALT-H Displays the Threads window to view all of the threads for the current process.
Debug.ToggleBreakpoint F9 Sets or removes a breakpoint at the current line.
Debug.ToggleDisassembly CTRL-F11 Displays the disassembly information for the current source file. Available only in break mode.
Debug.Watch1 CTRL-ALT-W, 1 Displays the Watch 1 window to view the values of variables or watch expressions.
Debug.Watch2 CTRL-ALT-W, 2 Displays the Watch 2 window.
Debug.Watch3 CTRL-ALT-W, 3 Displays the Watch 3 window.
Debug.Watch4 CTRL-ALT-W, 4 Displays the Watch 4 window.
Tools.DebugProcesses CTRL-ALT-P Displays the Processes dialog, which allows you to attach or detach the debugger to one or more running processes.
 
Table C-11. Object browser
 
Command Shortcut Description
Edit.FindSymbol ALT-F12 Displays the Find Symbol dialog.
Edit.GoToDeclaration CTRL-F12 Displays the declaration of the selected symbol in the code.
Edit.GoToDefinition F12 Displays the definition for the selected symbol in code.
View.FindSymbolResults CTRL-ALT-F12 Displays the Find Symbol Results window.
View.ObjectBrowser CTRL-ALT-J Displays the Object Browser to view the classes, properties, methods, events, and constants defined either in your project or by components and type libraries referenced by your project.
View.ObjectBrowserBack ALT-+ Moves back to the previously selected object in the selection history of the object browser.
View.ObjectBrowserForward SHIFT-ALT-+ Moves forward to the next object in the selection history of the object browser.
 
Table C-12. Tool window
 
Command Shortcut Description
Tools.CommandWindowMarkMode CTRL-SHIFT-M Toggles the Command window into or out of a mode allowing text within the window to be selected.
View.ClassView CTRL-SHIFT-C Displays the Class View window.
View.CommandWindow CTRL-ALT-A Displays the Command window, which allows you to type commands that manipulate the IDE.
View.DocumentOutline CTRL-ALT-T Displays the Document Outline window to view the flat or hierarchical outline of the current document.
View.Favorites CTRL-ALT-F Displays the Favorites window, which lists shortcuts to web pages.
View.Output CTRL-ALT-O Displays the Output window to view status messages at runtime.
View.PropertiesWindow F4 Displays the Properties window, which lists the design-time properties and events for the currently selected item.
View.PropertyPages SHIFT-F4 Displays the property pages for the item currently selected. (For example, use this to show a project's settings.)
View.ResourceView CTRL-SHIFT-E Displays the Resource View window.
View.ServerExplorer CTRL-ALT-S Displays the Server Explorer window, which allows you to view and manipulate database servers, event logs, message queues, web services, and many other operating system services.
View.ShowWebBrowser CTRL-ALT-R Displays the web browser window, which allows you to view pages on the Internet.
View.SolutionExplorer CTRL-ALT-L Displays the Solution Explorer, which lists the projects and files in the current solution.
View.TaskList CTRL-ALT-K Displays the TaskList window, which displays tasks, comments, shortcuts, warnings, and error messages.
View.Toolbox CTRL-ALT-X Displays the Toolbox, which contains controls and other items that can be dragged into editor and designer windows.
 
Table C-13. HTML Design view
 
Command Shortcut Description
Format.Bold CTRL-B Toggles the selected text between bold and normal.
Format.DecreaseIndent CTRL-SHIFT-T Decreases the selected paragraph by one indent unit.
Format.IncreaseIndent CTRL-T Indents the selected paragraph by one indent unit.
Format.Italic CTRL-I Toggles the selected text between italic and normal.
Format.LockElement CTRL-SHIFT-K Prevents an absolutely positioned element from being inadvertently moved. If the element is already locked, this unlocks it.
Format.ShowGrid CTRL-G Toggles the grid.
Format.SnapToGrid CTRL-SHIFT-G Specifies that elements be aligned using an invisible grid. You can set grid spacing on the Design pane of HTML designer options in the Options dialog, and the grid will be changed the next time you open a document.
Format.Underline CTRL-U Toggles the selected text between underlined and normal.
Insert.Bookmark CTRL-SHIFT-L Displays the Bookmark dialog.
Insert.DIV CTRL-J Inserts <div></div> in the current HTML document.
Insert.Hyperlink CTRL-L When text is selected, displays the Hyperlink dialog.
Insert.Image CTRL-SHIFT-W Displays the Insert Image dialog.
Table.InsertRowAbove CTRL-ALT-UP ARROW Adds one row above the current row in the table.
Table.InsertRowBelow CTRL-ALT-DOWN ARROW Adds one row below the current row in the table.
Table.InsertColumnstotheLeft CTRL-ALT-LEFT ARROW Adds one column to the left of the current column in the table.
Table.InsertColumnstotheRight CTRL-ALT-RIGHT ARROW Adds one column to the right of the current column in the table.
View.Details CTRL-SHIFT-Q Toggles display of marker icons for HTML elements that do not have a visual representation, such as comments, scripts, and anchors for absolutely positioned elements.
View.NextView CTRL-PAGE DOWN Switches from design view to HTML view and vice versa.
View.VisibleBorders CTRL-Q Displays a 1-pixel border around HTML elements that support a BORDER attribute and have it set to zero, such as tables, table cells, and divisions.
 
Table C-14. Macro
 
Command Shortcut Description
View.MacroExplorer ALT-F8 Displays the Macro Explorer window, which lists all available macros.
Tools.MacrosIDE ALT-F11 Launches the macros IDE.
Tools.RecordTemporaryMacro CTRL-SHIFT-R Places the environment in macro record mode or completes recording if already in record mode.
Tools.RunTemporaryMacro CTRL-SHIFT-P Plays back a recorded macro.
 
Table C-15. Dialog resource editor (but not the Windows Forms dialog Editor)
 
Command Shortcut Description
Format.AlignBottoms CTRL-SHIFT-DOWN ARROW Aligns the bottom edges of the selected controls with the dominant control. The dominant control is the last one to be selected.
Format.AlignCenters SHIFT-F9 Aligns the vertical centers of the selected controls with the dominant control.
Format.AlignLefts CTRL-SHIFT-LEFT ARROW Aligns the left edges of the selected controls with the dominant control.
Format.AlignMiddles F9 Aligns the horizontal centers of the selected controls with the dominant control.
Format.AlignRights CTRL-SHIFT-RIGHT ARROW Aligns the right edges of the selected controls with the dominant control.
Format.AlignTops CTRL-SHIFT-UP ARROW Aligns the top edges of the selected controls with the dominant control.
Format.ButtonBottom CTRL-B Places the selected buttons along the bottom center of the dialog.
Format.ButtonRight CTRL-R Places the selected buttons in the top-right corner of the dialog.
Format.CenterHorizontal CTRL-SHIFT-F9 Centers the controls horizontally within the dialog.
Format.CenterVertical CTRL-F9 Centers the controls vertically within the dialog.
Format.CheckMnemonics CTRL-M Checks uniqueness of accelerator mnemonics. If you have the same accelerator key assigned to two different controls, this will warn you of the problem.
Format.SizeToContent SHIFT-F7 Resizes the selected control(s) to fit the caption text.
Format.SpaceAcross ALT-LEFT ARROW Evenly spaces the selected controls horizontally.
Format.SpaceDown ALT-DOWN ARROW Evenly spaces the selected controls vertically.
Format.TabOrder CTRL-D Sets the order of controls within the dialog.
Format.TestDialog CTRL-T Displays the dialog to allow you to check its appearance and behavior.
Format.ToggleGuides CTRL-G Cycles between no grid, guidelines, and grid for dialog editing.
 
Table C-16. Accelerator and string resource editor
 
Command Shortcut Description
Edit.NewAccelerator INSERT Adds a new entry for an accelerator key. Available only in the accelerator editor.
Edit.NewString INSERT Adds a new entry in the string table. Available only in the string editor.
Posted by 나비:D
:

출처 : http://eslife.tistory.com/entry/안전하고-좋은-냄새가-나는-C-코드-만들기

C++
을 배운지 꽤 오래 되었지만, 아직도 코드 리뷰를 통해 다른 개발자들의 코드를 볼 때면 한숨이 나오는 경우가 많습니다.

이런 경우가 반복되다 보니, 예전에 몇 가지 코딩 규칙 비슷하게 만들어놓은 자료가 있어 포스팅해 봅니다.  자료가 만들다 말아 내용이 중구난방이네요..  앞으로도 계속 내용 보강해 나가겠습니다.

 

    포인트 핸들 및 윈도우 핸들 체크

-       함수로 전달된 포인터 인자나, new 로 생성한 포인터 등 모든 포인터는 사용하기 직전 포인터 검사를 수행

-       가급적 STL 컨테이너를 사용해서 아예 포인터를 사용하지 않는 것이 정신건강에 이롭다. (STL 자체적으로 메모리 생성 및 소멸)

-       메모리 LEAK 을 막기 위해 SMART POINT 와 같은 Wrapper 클래스를 만든다.

-       (윈도우 프로그램의 경우)윈도우 API 호출 직전 항상 윈도우 핸들이 정상인지 IsWindow 와 같은 함수로 검사한다.

 

    DRY(Don't Repeat Your Code)원칙

-       같은 코드를 여기 저기 중복해서 사용하지 말아야 한다. (☞ 실용주의 프로그래머 참고). 중복해서 사용할 경우 코드 량이 늘어날 뿐만 아니라 유지보수 cost 가 같이 늘어 나고, 추후 추가/개선/변경 등의 요구사항으로 인한 모듈 수정 시 여러 소스를 함께 수정해야 한다.

-       동일한 코드를 공용 루틴(함수)으로 개발 – 2~3줄 짜리 복잡한 if 문도 bool 를 리턴 하는 함수로 개발(Refactoring 참고)

 

    클래스간 종속성 최소화

-       대규모 프로젝트에서는 공통모듈이 변경되어도 이를 사용하는 모듈이 문제가 없도록 반드시 공통모듈은 인터페이스 기반(데이터가 없는, virtual 가상함수로만 구성된)으로 구현한다. (The C++ Programming Language 참고)

-       A 클래스 → B 클래스 → C 클래스를 사용할 경우 각 클래스는 자기가 직접 다루는 클래스(A B, B C) 만 알아야 한다. A 클래스는 C 클래스를 직/간접적으로 include 해서는 안되며 C 클래스의 변경으로 인해 A 클래스가 컴파일 되어서는 안 된다. A 클래스가 C 를 직접 접근할 경우가 있다면 B 클래스에 위임함수를 만들어 해결한다. (☞ 실용주의 프로그래머 참고)

-       B 클래스가 A 클래스로 어떤 데이터를 전달할 경우가 있다면(주로 이벤트 발생시 값을 전달하기 위해) A 클래스의 최소 인터페이스만을 B 클래스에 전달하여(COM 의 이벤트 소스 방식) 종속성을 최소화 한다. (Developer’s Workshop To COM and  ATL 3.0 참고)

 

    함수 인자 전달

-       함수의 인자는 최대 7개를 넘지 않아야 한다(Code Complete 2 참고)

-       클래스 인스턴스를 함수 인자로 넘겨서는 안 된다(특히 함수 인자로 CString 을 넘기는 경우가 많음. CString → const CString& CString*, const char* 등으로 수정한다. )

 

    오류조건을 먼저 검사하여 오류 체크로 인해 코드 가독성이 떨어지지 않도록 하자.

-       특정 오류조건이 발생하면 더 이상 함수 수행에 의미 없을 경우, 이러한 오류 조건들은 함수초입단계부터 먼저 확인해서 바로 리턴 한다

-       위와 같이 오류조건이 먼저 확인되면 프로그램 코드에서 if depth 가 줄어 들고 코드 읽기가 수월해 지는 장점이 있다.

Before

After

void CClass::OnTest()

{

 ...

 ...

 if (m_pWndMain)

 { 

  DoSomething1();

 }

 ...

 if (m_pWndMain)

 { 

  DoSomething2();

 }

 

}

void CClass::OnTest()

{

 if (m_pWndMain == NULL)

  return;

 ...

 ...

 DoSomething1();

 ...

 DoSomething2();

 

}

 

    긴 함수 쪼개기 (Refactoring 참고)

-       긴 함수는 작은 여러 개의 함수로 쪼갠다(Refactoring 책에 의하면 2-3줄 짜리 함수로까지 쪼개어서 코드 가독성을 높이도록 하고 있음)

-       작은 함수로 쪼개다 보면, 작은 함수를 재활용하게 될 수 있고

-       긴 함수보다 코드 읽기가 수월해 지며

-       결국 유지보수가 쉬워진다

 

    enum 값 선언 시 _START, _END 를 활용하자( CODE COMPLETE2 참고)

-       enum 으로 선언된 값들을 변수나 for loop 를 이용하여 반복 계산할 경우가 종종 있는데 이 경우 enum 시작과, 끝을 나타내는 값을 enum 선언에 포함하면 유용하게 사용할 수 있다.

-       추후 enum 에 값을 추가해야 할 경우 _END 값을 사용한 배열은 코드 변경없이 크기가 늘어남

-       For 루프 등에 _START, _END 을 사용할 수 있어 유지 보수에 유리

Before

After

enum WEEK_NAME

{

           SUNDAY                     = 0,

           MONDAY                    = 1,

           TUESDAY                    = 2,

           WEDNESDAY     = 3,

           THURSDAY       = 4,

           FRIDAY            = 5,

           SATERDAY        = 6,

};

 

int nWeeks[SATERDAY + 1];

}

enum WEEK_NAME

{

           WEEK_STAR       = 0,

           SUNDAY                     = 0,

           MONDAY                    = 1,

           TUESDAY                    = 2,

           WEDNESDAY     = 3,

           THURSDAY       = 4,

           FRIDAY            = 5,

           SATERDAY        = 6,

           WEEK_END        = 6,

};

 

int nWeeks[WEEK_END + 1];

 

 

    복잡한 제어문을 가진 루틴을 피하자  

-       If 문은 2 depth 이상 들어 갈 경우 refactoring 하라 (CODE COMPLETE2)

     대부분 코드를 제대로 이해하지 못해 복잡한 코드를 작성하고 있다.

     개발자 90% 2 depth 이상 들어가는 if 문장을 이해하지 못한다

-       IF~ELSE IF ~ELSE IF ~ …. ELSE 가 길게 이어질 경우 SWITCH 문으로 바꾼다

-       IF 문이 길게 늘어 질 경우 함수로 분리한다

-       C++ factory 개념으로 상속을 이용한 클래스를 만드는 방법도 활용

Posted by 나비:D
:
Posted by 나비:D
:

출처 : http://cafe.naver.com/flexcomponent/911

1. 디자이너는 설계 문서를 바탕으로 화면 레이아웃을 잡고 개발자에게 넘겨준다. (전체 틀)

2. 개발자는 mxml을 사용해서 레이아웃을 구현하고 기능을 구현한다. (mxml과 이벤트 처리 및 데이터 처리)

단, 아키텍처에 따라 하위 어플리케이션에 대한 레이아웃을 일관성 있게 가져갈 수 있도록 고려해야 한다.

3. 디자이너는 기본 레이아웃에 기반한 모든 화면에서 공통 사용할 부분에 대해 정리하고 개발자에게 넘겨준다. (문자크기, 정렬, 색 등등)

4. 개발자는 최종 디자인을 mxml에 적용한다.

5. 디자이너는 아웃풋을 보고 검토한다.

6. 개발자는 검토시 나온 수정사항들을 반영한다.

7. 디자이너는 각 화면별 상세 디자인을 하고 개발자는 계속해서 적용해 나간다.

===========================================================

위 과정에서 mxml 구현은 시간이 지날수록 디자이너 몫이 되야 하고, 스킨 및 스타일, 이펙트, 테마 등을 적용할 수 있어야 한다.

물론, DisplayObject를 사용하여 드로잉이 가능해야 하고 프로그램적인 관점에서 재사용 가능한 모듈 정도는 디자이너가

구현할 수 있어야 한다.

실제 런던에 유명한 모 대학교에서는 디자인 전공자들에게 Java 언어가 필수과목으로 지정되어 있다.

그것은 디자이너도 기본적으로 프로그램적인 마인드를 가지고 있어야 한다는 말을 하는 것이다.

디자이너가 할일과 프로그래머가 할일은 명확히 구분되어야 한다.

그래야 퀄리티 부분에서 뛰어날 수 있다.

Posted by 나비:D
:

BLOG main image
by 나비:D

공지사항

카테고리

분류 전체보기 (278)
Programming? (0)
---------------------------.. (0)
나비의삽질 (5)
Application (177)
SQL (51)
Web (27)
etc. (14)
Omnia (0)
---------------------------.. (0)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

달력

«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Total :
Today : Yesterday :