Computer Science

C#: setup.exe (embeded DLL)

C#은 따로 배운 적이 없어 코드를 눈이 빠지게 읽고 익히는 중에, 프로그램을 어떤 환경에서나 사용할 수 있도록 셋업파일을 만들라는 지시를 받았다.

항상 학교에서 과제를 하거나, 프로젝트를 하더라도 비주얼스튜디오와 주변 환경들이 셋팅되어있다는 전제 하에 프로그램을 만들어왔다. 교수님 컴퓨터에도 내 컴퓨터에도 당.연.히 환경이 다 설정되어있으니까...!~! 그러나 회사에 와보니ㅠ 이 놈의 환경 셋팅은 생각보다 더욱 더 복병이었다. 이런 고민은 당연히 회사에서도 똑같이 하고 있었을것이고, 그 결과 '어떤 환경에서나 프로그램을 설치하고 사용할 수 있도록 설치파일로 배포하는 것'이 이번 나의 업무이다. 홧팅 핫-팅-!

1. 솔루션에서 새 프로젝트 추가(Setup Project로 성택)
: 세 가지 폴더가 보인다. Application Folder, User's Desktop, User's Pograms Menu.

Application Folder는 실행프로그램이 저장될 위치이다. 우리가 프로그램을 설치하면 주로 'C:\Program Files (x86)\해당프로그램폴더'에 설치되는데, 그 폴더를 말하는 것임! 이 프로그램이 내 컴퓨터에서 사용되기 위해 필요한 메타데이터파일이나 필요한 파일들이 설치하는 동시에 이 곳에 저장된다.

User's Desktop은 내 바탕화면! 바탕화면에서 바로 프로그램에 접근할 수 있도록 보통은 바로가기 아이콘을 놓지않는감? 그렇게 만들 수 있다.  

User's Progams Menu는 시작메뉴 폴더. 

2. Application Folder에서 오른쪽 마우스 클릭 -> add -> 프로젝트출력.

그러면 우선 자동으로 프로그램 실행에 필요한 파일들이 촤르르르륵 뜬다. 보통 필요한 DLL파일과 프로그램exe파일까지 설치된다. 여기서 나의 문제는 필요한 어떤 DLL파일이 함께 프로그램 폴더에 설치되질 않아서 프로그램 작동이 안되는 것이었다. 동공지진. 

그럼 당황하지않고, add -> 파일 -> 뫄뫄.dll 파일을 클릭하여 추가해주면 된다. 

3. 특정 dll파일 embed.

특정 dll파일은 내가 add->파일추가로 임의로 추가할 수 있는데, 그래도 애플리케이션 폴더에 함께 설치되지가 않는 것이었다ㅠ_ㅠ 눈물을 머금고 이 방법 저 방법을 모두 찾아보았다. Visual Studio 17년도 이후부터 사용할 수 있다는 NuGet패키지의 Constura.Fody와 Fody를 설치하면 dll파일이 잘 참조된다고 한다. 그!러!나! 회사에서 15년도 버전을 사용하기때문네......NuGet으로 해결되지않았다 핫 핫 핫

*** 그리고 결국 찾아낸 방법은 main.cs 소스 자체에 코드를 추가하는 것이었다. how to? 하단 코드를 보셈..! 

// setup파일에 ***.dll 추가하기위한 코드 (2019.12.16 혜승 수정)
[DllImport("***.dll", CallingConvention = CallingConvention.Cdecl)]

public static extern string ***dll(string source, string key);

// setup파일에 &&&.dll 추가하기위한 코드 (2019.12.16 혜승 수정)
[DllImport("&&&.dll", CallingConvention = CallingConvention.Cdecl)]

public static extern string &&&dll(string source, string key);

4. User's Desktop에서 오른쪽 마우스 클릭 -> 바로가기 생성 -> Application Folder의 프로그램.exe 파일 선택

바탕화면에 바로가기 아이콘을 만들기 위함이다.

5. setup 프로젝트 선택 후, 솔루션 정리->솔루션 빌드 -> 프로젝트 디버깅없이 빌드

setup.msi와 setup.exe파일이 생긴다. 테스트 해보면 완료-!

나에게는 큰 도전이었고, 새로운 일이었기 때문에 어렵고 재밌었다. 오늘도 많이 배웠다!

 

 

***참고로 'C:\Program Files (x86)\해당프로그램폴더' 폴더명을 제대로 설정 안하면 default어쩌고저쩌고로 만들어지는 것 같았다. 뭔가 완성도 떨어지는 기분이니 이것도 바꾸고, ico도 추가해주면 좋겠지...요...? setup프로젝트 클릭하고 속성 누르면 이 창이 뜬다!!

회사 프로그램이라 다 가렸는데, 나의경우에는 Author, Manufacturer, ProductName만 변경했다. 'C:\Program Files (x86)\해당프로그램폴더'의 폴더명은 Manufacturer로 설정되고, 그 하위폴더에 ProductName폴더가 생기고, 그 폴더 내부에 파일들이 생성된다. 물론 그것도 변경할 수 있지만! 하여튼 참고하시면 되겠습니다~!