본문 바로가기
Development/C#

코드로 배포/설치프로그램 생성 후 명령프롬프트 명령 내리기

by KingCat 2011. 2. 16.
특정 프로그램 실행시 레지스트리 등록이나 별도의 프로그램 실행이 필요한 경우가 있다.

이때, 배포/설치 프로그램으로 배포/설치를 하는 경우 경로가 변경되는데, 이를 감안하여 코딩을 해보았다.

내용은 윈도우의 regsvr32를 이용해 ocx를 레지스트리에 등록하는 작업이다.

string text = "@echo off" + Environment.NewLine + "regsvr32 " + "\"" +
                  Application.StartupPath + @"\Test.ocx" + "\"" +
                  Environment.NewLine + "exit" + Environment.NewLine;

우선 Application.StartupPath를 이용해 프로그램이 실행된 위치를 알아오고, 그 위치에 있는 Test.ocx 파일을 regsvr32 명령을 이용해 레지스트리에 등록하도록 하는 문자열을 만들었다.

참고로 단순히 실행 문자열이 아니라 bat 파일을 이용해서 실행시키기 위해 @echo off 같은 구문을 붙였다.

그 이유는 C# 코드에서 Process.Start("문자열"); 이런식으로 넣으니 도무지 프롬프트가 인식을 못했기 때문이다.

이 후, StreamWriter file = new StreamWriter(Application.StartupPath + @"\start.bat");
                file.WriteLine(text);
                file.Close();
이런식의 구문을 통해 bat 파일을 생성하여 준다.

Process.Start(Application.StartupPath + @"\start.bat").StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

최종적으로 위의 구문을 적어주면 string text를 이용한 bat 파일을 자동으로 생성하여 그 bat 파일을 실행시켜준다.

단, Program Files 폴더에 프로그램이 설치가 된 경우 bat 파일 생성시 권한 오류가 발생하기도 하기 때문에 프로그램 설치 기본 폴더를 Program Files를 피하는 방법을 쓰기도 해야한다.

또한, win7 64bit os 같은 경우 ocx 등록 에러가 발생하기도 하는데, 이는 bat 파일 실행시 발생하는 명령프롬프트 창이 관리자 권한으로 실행되어야 하기 때문이다.
해결 방법은 bat파일을 관리자 권한으로 수동 실행 해주어야 한다.