프로그램을 윈도우 부팅과 함께 실행하는 방법은 여러가지가 있을것이다. 레지스트리에 추가하는 방법과 그렇지 않은 방법. 글쓴이의 경우에는 Qt를 사용할때 그렇지 않은 방법으로 해결했는데 C#에서도 역시 그러할 것이다. 물론 우선순위를 선정하여 빠르게 실행시키기 위해선 레지스트리에 등록해야 하지 않을까 싶다.

1
AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

위 폴더에 등록된 프로그램은 윈도우 부팅과 함께 자동으로 시작된다. 물론 바로가기 파일을 등록해야 정상적으로 사용가능. 우리가 직접 제작한 프로그램 말고도 시작시 켜지면 좋을듯한 파일들을 저곳에 넣으면 유용하게 사용이 가능하다.

본론으로 돌아와 AppData가 보관되어 있는 User의 이름을 먼저 알아야할 필요가 있다. 그래야 정상적으로 프로그램을 해당 폴더에 등록이 가능하기 때문이다. C#에서는 그 기능을 간단한 명령어로 제공해 준다.

1
2
3
4
5
class Setting
{
    public static string Username = Environment.UserName;
    public static string Path = "C:\\Users\\" + Username + "\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup";
}

먼저, 큰 의미는 없지만 위와같은 Setting Class를 생성했다. Environment.UserName을 사용하면 윈도우를 이용중인 사용자의 이름을 손쉽게 가져올 수 있다.

COM → Windows Script Host Object Model

1
using IWshRuntimeLibrary;

또한 바로가기 생성을 위해선 위와같은 참조파일을 가져와야 한다. 그리고 위와같은 라이브러리를 using 해주면, 모든 준비를 마쳤다고 볼 수 있다.


바로가기 생성

1
2
3
4
5
6
7
8
9
10
11
private void 자동시작_Click(object sender, EventArgs e)
{
    WshShell WSH = new WshShell();
    IWshRuntimeLibrary.IWshShortcut myShortcut;
    myShortcut = (IWshRuntimeLibrary.IWshShortcut)WSH.CreateShortcut(Setting.Path + "/SkyNote.lnk");
    myShortcut.TargetPath = Application.ExecutablePath; // Path to the Original file
    myShortcut.Description = "Launch SkyNote in Windows Startup"; // Explanation
    myShortcut.WorkingDirectory = Application.StartupPath; // Path to the Original folder
    myShortcut.IconLocation = Application.ExecutablePath;
    myShortcut.Save();
}

자동시작 버튼을 눌렀다고 가정할때 위와같이 이벤트를 생성하면 바로가기가 성공적으로 생성된다. WorkingDirectory는 파일 입출력을 사용중 이라면 반드시 등록해야한다. 아니면 자동시작 폴더에서 파일이 생성되어 문제가 생길 수 있다.

위와같이 성공적으로 바로가기를 생성했으나 아무런 알람이 없으면 사용자는 된건지 만건지 어디에 만들어 둔건지 궁금증을 가질 수 있다. 따라서 폴더의 위치를 한번 띄어주거나 메세지 박스를 띄워주는 센스를 발휘하도록 하자.

1
2
3
System.Diagnostics.Process.Start(Setting.Path);
// or
MessageBox.Show("Done!", "Notice");

자동시작 해제 역시 바로가기 파일을 삭제만 시켜주면 되기때문에 간단하다.

WRITTEN BY

배진오

소비적인 일보단 생산적인 일을 추구하며, 좋아하는 일을 잘하고 싶어합니다 :D
im@baejino.com