2012-02-28 6 views
2

Windows 시작시 시작해야하는 응용 프로그램을 작성했습니다. Windows의 항목을 HKCU \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run에 등록합니다. 항목이 성공적으로 추가되었지만 프로그램이 제대로 시작되지 않았습니다.Windows 7 시작 프로그램 시작 (자동 시작)

Windows 7 64 비트 응용 프로그램을 테스트했습니다. 응용 프로그램을 실행하려면 관리자 권한이 있어야합니다. 아마도 이것이 시작되지 않는 이유일까요?

나는 또한 엔트리의 값이 따옴표 안에 없다는 것을 알았다. 의무입니까? 나는 그것을 작동하게하는 방법 캔트

  var registry = Registry.CurrentUser; 
      var key = registry.OpenSubKey(runKeyBase, true); 
      key.SetValue(KEY, directory + @"\" + filename); 
      Registry.CurrentUser.Flush(); 

: 여기

내 C# 코드인가?

+0

가능한 중복 http://stackoverflow.com/questions/5127375/running-program-as-administrator-at-startup – Mohit

+0

아니요, 내 프로그램이 전혀 시작되지 않아 중복되지 않습니다 ... – nosbor

+2

경로가 필요한 경우 따옴표가 필요합니다. 공백이 포함되어 있습니다. –

답변

3

다른 말로하면 서명 된 응용 프로그램 만 시작할 수있는 사용자 액세스 제어 설정으로 인해 관리자 권한을 요청하는 것입니다.

시작 중에 레지스트리 설정을 완료하더라도 OS가 응용 프로그램을 실행하지 않습니다.

인용문은 필수 항목이 아닙니다. 당신은 그럴 수 있거나 가질 수 있습니다.

내가 한 방법은 시작 폴더에 바로 가기를 배치하는 것이 었습니다. 레지스트리 설정이 작동하지 않습니다.

추가로 시도해 볼 수있는 한 가지 방법은/system32 또는/windows에 파일을 저장 한 다음 레지스트리에서 설정을 시도하는 것입니다.

+0

이 문제에 대해 더 자세히 알려 주실 수 있습니까? 이제 admin 속성으로 실행을 클릭하면 이렇게하면 exe에 매니페스트 파일이 필요 없다는 뜻입니까? 또한 UAC가 완전히 활성화 된 경우 (기본 설정시)이 기능이 실제로 작동합니까? Vista와 Win7에서 기본 설정으로 UAC를 사용할 수 있습니까? 도 system32 및 windows dirs에 대해 실제로 작동합니까? 그래서, 내 첫 번째 실행 (아무런 문제가) 상승 된 레지스트리 변경을 할 수있는 상승 된 모드를 얻을 수 있지만 재시작/두 번째 실행, UAC 내 프로그램을 차단합니다. 이 dirs에서 자동 시작 위치를 지정하면 문제가 해결됩니까? –

+0

관리자로 응용 프로그램을 실행하면 UAC에서 메시지를 표시하지 않으며 매니페스트 파일을 포함 할 필요가 없습니다. 매니페스트 파일은 두 번 클릭하여 응용 프로그램을 실행하기 위해 전제를 설정하려는 경우 필요합니다. 두 번 클릭하거나 간단히 열면 매니페스트 파일에 runasAdmin이 설정되어 있으면 창이 자동으로 권한 상승을 요청합니다. 내가 처음 실행했을 때와 다른 시간에 실패한 것 같은 ... 처음 시작할 때 실행하고 싶다면 응용 프로그램에 서명해야한다고 생각하지만 돈을 지불하고 싶지 않기 때문에 내 개인 앱에 서명하지 않았습니다. 그 : – Dinesh

+0

좋은 생각, 또한, 당신은 Windows 작업 스케줄러를 사용하여 프롬프트를 없애려고 했나요? WIndows가 개발자와 사용자에게이 백도어를 제공 한 이유를 알지 못합니다. upvoted. –

5

Startup 폴더에 바로 가기를 배치하는 것이 가장 좋은 이유는 무엇입니까? 당신이 시작하고 마우스 오른쪽 버튼으로 클릭에서 실행 찾고있는 EXE에

이동, 바로 가기 만들기 : 그런 식으로 당신은 또한 관리자로

편집을 실행하는 바로 가기의 속성을 설정할 수 있습니다.

해당 바로 가기에 대한 속성에서 관리자 권한으로 실행을 선택하십시오.

시작 폴더에이 파일을 저장하십시오 (시작 메뉴의 폴더에서 탐색을 클릭하면 해당 파일을 찾을 수 있습니다). 그러면 Windows 로그인시 해당 응용 프로그램이 시작됩니다. UAC에 승인이 필요한 경우 프로그램을 실행해도 괜찮은지 사용자에게 묻습니다.

+0

이 문제에 대한 자세한 내용을 알려 주실 수 있습니까? 이제 admin 속성으로 실행을 클릭하면 이렇게하면 exe에 매니페스트 파일이 필요 없다는 뜻입니까?또한 UAC가 완전히 활성화 된 경우 (기본 설정시)이 기능이 실제로 작동합니까? Vista와 Win7에서 기본 설정으로 UAC를 사용할 수 있습니까? 감사. –

+0

시작시 실행할 exe로 이동하고 마우스 오른쪽 단추를 클릭하여 바로 가기를 작성하십시오. 해당 바로 가기의 속성에서 관리자 권한으로 실행을 선택합니다. 그런 다음이 파일을 시작 폴더에 저장하십시오 (시작 메뉴의 폴더에서 탐색을 클릭하면 해당 폴더로 이동할 수 있습니다). 그러면 Windows 로그인시 해당 응용 프로그램이 시작됩니다. UAC에 승인이 필요한 경우 프로그램을 실행해도 괜찮은지 사용자에게 묻습니다. – JeremyK

+1

아아 네, 시작 폴더는 깔끔한 트릭입니다. 물론 단축 옵션에 관리자 옵션으로 실행을 자동 삽입하는 것이 또 다른 좋은 아이디어입니다. 관심있는 사람을 사용하기 위해서는 매니페스트 파일이 필요 없습니다. Upvoted. –

0

시작할 때 프로그램을 셀프 레이팅 할 수 있습니다. 그냥 시작 부분에 다음 코드를 실행합니다

public static void runAsAdmin(string[] args) 
    { 
     ProcessStartInfo proc = new ProcessStartInfo(); 

     if (args != null) 
      proc.Arguments = string.Concat(args); 

     proc.UseShellExecute = true; 
     proc.WorkingDirectory = Environment.CurrentDirectory; 
     proc.FileName = System.Reflection.Assembly.GetExecutingAssembly().CodeBase; 
     proc.Verb = "runas"; 



     bool isElevated; 
     WindowsIdentity identity = WindowsIdentity.GetCurrent(); 
     WindowsPrincipal principal = new WindowsPrincipal(identity); 
     isElevated = principal.IsInRole(WindowsBuiltInRole.Administrator); 

     if (!isElevated) 
     { 

      try 
      { 
       Process.Start(proc); 
      } 
      catch 
      { 
       //No Admin rights, continue without them 
       return; 
      } 
      //Close current process for switching to elevated one 
      Environment.Exit(0); 
     } 
     return; 
    } 

또한 미래에 침묵 시작을 (이 활성화 된 경우)는 UAC 알림을 비활성화 할 수있는 관리자 권한을 얻기 후 : 에 대한

private void disableUAC() 
    { 
     RegistryKey regKey = null; 

     try 
     { 
      regKey = Registry.LocalMachine.OpenSubKey(ControlServiceResources.UAC_REG_KEY, true); 
     } 

     catch (Exception e) 
     { 
      //Error accessing registry 
     } 


     try 
     { 
      regKey.SetValue("ConsentPromptBehaviorAdmin", 0); 
     } 
     catch (Exception e) 
     { 
      //Error during Promt disabling 
     } 


    } 
관련 문제