성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
[정성태] 저렇게 조각 코드 말고, 실제로 재현이 되는 예제 프로젝트를 압...
[정성태] Modules 창(Ctrl+Shift+U)을 띄워서, 해당 Op...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <div style='font-family: 맑은 고딕, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>ClickOnce - 관리자 권한 상승하는 방법</div> <br /> 개인적으로, ClickOnce에서 아쉬운 것이 있었다면 "관리자 권한 상승(Run as administrator)"이 불가능하다는 것입니다. 이전에도 제 웹 사이트 게시판에 아래와 같은 질문이 있었는데요.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > [질문/답변] 클릭원스를 비스타에서 실행시 ; <a target='_tab' href='http://www.sysnet.pe.kr/3/0/822'>http://www.sysnet.pe.kr/3/0/822</a> </pre> <br /> ClickOnce에 배포되는 .exe.manifest의 requestedExecutionLevel 값을 강제로 requireAdministrator 값을 주어도 "The Execution level requested by this application is not supported"라는 오류 메시지만 클라이언트에 출력되고 동작되지 않습니다.<br /> <br /> 실제로 저 역시, 위에 제가 답변했던 그대로, 관리자 권한이 필요한 부분을 별도로 NT 서비스로 제작하고 클릭원스의 Bootstrapper에 넣어서 배포를 한 적이 있었습니다.<br /> <br /> 그런데, 갑자기... 오늘은 ^^; 늘 보아왔던 "작업관리자"의 "Show processes from all users" 버튼이 눈에 들어왔습니다. <br /> <br /> <img alt='clickonce_run_as_adminrights_0.png' src='/SysWebRes/bbs/clickonce_run_as_adminrights_0.png' /><br /> <br /> '그렇지! ClickOnce로 배포된 응용 프로그램도 자신을 실행할 때 권한 상승시켜서 재실행하면 되지 않을까!'라는 간단한 해답이었습니다. 1년이나 지나서 이런 생각이 드는군요. ^^;<br /> <br /> <hr style='width: 50%' /><br /> <br /> 구현 방법은 모두 공개되어 있습니다. 자신의 프로세스를 권한 상승시켜서 재실행하는 방법은 다음의 글에서 자세하게 소개해주고 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > Add a UAC shield to a button when elevation is required for admin tasks ; <a target='_tab' href='http://www.codeproject.com/KB/vista-security/UAC_Shield_for_Elevation.aspx'>http://www.codeproject.com/KB/vista-security/UAC_Shield_for_Elevation.aspx</a> </pre> <br /> 위의 방법을 클릭원스 상황에 맞게 적용시키면 되는데요. Form이 실행되기 전에 "권한 상승된 프로세스"인지 스스로 점검하고, 그렇지 않은 경우라면 권한 상승시켜서 실행시키는 코드로 적절하게 바꾸는 것인데, 아래에 간단하게 실어보았습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > ===== Program.cs ===== static class Program { [STAThread] static void Main() { if (<b style='COLOR: blue'>IsAdministrator</b>() == false) // C/C++의 경우, <a href='https://www.sysnet.pe.kr/2/2/90'>현재 사용자가 관리자 그룹에 속해 있는지 결정하는 코드</a> 참고 { try { ProcessStartInfo procInfo = new ProcessStartInfo(); <b style='COLOR: blue'>procInfo.UseShellExecute = true; procInfo.FileName = Application.ExecutablePath; procInfo.WorkingDirectory = Environment.CurrentDirectory; procInfo.Verb = "runas"; Process.Start(procInfo);</b> } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } return; } Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } public static bool IsAdministrator() { WindowsIdentity identity = WindowsIdentity.GetCurrent(); if (null != identity) { WindowsPrincipal principal = new WindowsPrincipal(identity); return principal.IsInRole(WindowsBuiltInRole.Administrator); } return false; } } ===== Form1.cs ===== public partial class Form1 : Form { public Form1() { InitializeComponent(); if (Program.IsAdministrator() == true) { <b style='COLOR: blue'>this.Text += " (Administrator)";</b> } } } </pre> <br /> 예제 삼아서, 제 홈페이지에 위의 코드를 빌드시켜서 클릭원스로 배포한 경로는 다음과 같습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > WindowsFormsApplication1 ; <a target='_tab' href='http://www.sysnet.pe.kr/temp/app/runasadmin/publish.htm'>http://www.sysnet.pe.kr/temp/app/runasadmin/publish.htm</a> </pre> <br /> "Install" 버튼을 눌러서 실행시키면, 배포가 완료된 후 아래와 같이 권한 상승 창이 뜨고,<br /> <br /> <img alt='clickonce_run_as_adminrights_1.png' src='/SysWebRes/bbs/clickonce_run_as_adminrights_1.png' /><br /> <br /> 이후, 원했던 대로 "관리자 권한"으로 실행된 클릭원스 응용 프로그램을 확인할 수 있습니다. ^^ (다른 코드 없으니, 두려워하지 마시고 ^^ 그냥 실행해 보셔도 됩니다.)<br /> <br /> <img alt='clickonce_run_as_adminrights_2.png' src='/SysWebRes/bbs/clickonce_run_as_adminrights_2.png' /><br /> <br /> 물론, 여전히 권한 상승창은 사용자에게 귀찮은 작업이므로 "Bootstrapper + NT 서비스 배포"는 유용할 수 있습니다. 어쨌든, 이로써 클릭원스 배포의 한 가지 장벽이 허물어지는군요. ^^<br /> <br /><br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1546
(왼쪽의 숫자를 입력해야 합니다.)