Computer Science

C#: setup.exe (관리자 권한)

2.hye.s 2020. 1. 16. 15:14

항상 관리자 권한에 의문을 갖고있었다. 마우스 우클릭하여 관리자권한으로 실행만 누르면 다 되는 것을 굳~이 관리자권한이라는 이름을 줄 필요가 있었나 라는 의문. 오늘로 그 의문이 해결되었다. 프로그램 설치 시, 권한이 없다면 C:\Program Files\뫄뫄   폴더에 접근권한 자체가 생기질 않는 것...~.... 예를 들어, 버튼을 누르면 db가 생성된다거나, 프로그램 실행 중에 입력한 데이터를 저장하게 하려면, C드라이브에의 접근 권한(쓰기)이 생겨야만 프로그램이 제대로 작동할 것이다. 

현재 내가 만지는 프로그램또한 솨솨.dll(DB 정보를 담고있는 메타데이터파일)이 없다면, db생성 버튼을 눌러 특정 db를 생성하도록 한다. dll파일이 있다면, 애초에 버튼이 생성이 안되도록! 하단의 코드 흐름을 참고하면 이해하기 더 편할듯 싶다.

if ( !File.exist(@"솨솨.dll") ) 
	'db생성'버튼 나타남

else 
	안나타남

 


문제는!!!!!! Setup파일로 설치한 프로그램을 실행하여 db생성 버튼을 누르면, 접근 권한이 없다고 뜨는 것이었다. 이때까지는 아무 생각없이,, DB정보 메타데이터파일을 추가해서 setup파일을 만들어버렸다.(C#: setup.exe 글 쓸 즈음) 그렇게 되면, db생성버튼은 영원히 미궁속으로(...) 평생 볼 수 없는 존재가 되어 버린다. 다른 노트북에 테스트해보다가 갑자기 깨닫게 되어,,, 멘붕,,,,🧦,,,,,,

자 차근차근 시도해보쟈 -


1. 솨솨.dll(DB 정보 메타데이터파일)을 embed하지 않은 setup파일을 빌드해본다. 즉, db정보 메타데이터파일 없이 빌드!

--> 짜잔 db생성 버튼이 뜬다!
BUT C:₩Program Files(x86)₩뫄뫄 폴더에 접근 권한이 없다는 오류가 뙇,,, 그렇다면 프로그램 실행시에 관리자 권한이 필요하단 뜻이니까아

2. 프로그램에 관리자권한을 준다.

사진의 큰 네모를 참고하여 작은 네모 부분만 수정해주면 된다!

참고로 나는 visual studio 2015버전을 사용하고 있다는 점을 밝히며,,

Visual studio에서 'ooo' 프로젝트 속성 

> 보안 

> ClickOnce보안설정사용(N) 체크 && 완전 신뢰 응용프로그램(L) 체크

> 로젝트 하단의 app.manifest 코드 수정 ### level="asinvoker" 부분을 "requireAdministrator"로 변경

> ClickOnce보안설정사용(N) 체크 해제 ### 해제하지않으면 default인 기본권한을 사용하게된다. 꼭 해제해야 함!

 

3. 다시 셋업파일 생성하니 성공!


오늘도 새로운 일을 해보았고, 뿌듯한 마음으로 퇴근한다. 총총.