IT TIP

시작할 때 시작할 프로그램을 어떻게 설정합니까?

itqueen 2020. 11. 2. 20:09
반응형

시작할 때 시작할 프로그램을 어떻게 설정합니까?


CheckBoxWindows에서 앱을 시작하려는 경우 사용자가 설정할 수 있는 옵션 이있는 작은 응용 프로그램이 있습니다.

내 질문은 실제로 시작시 앱이 실행되도록 설정하는 방법입니다.

추신 : .NET 2.0에서 C #을 사용하고 있습니다.


선호하는 순서대로 몇 가지 옵션 :

  1. 현재 사용자의 시작 폴더에 추가하십시오. 이를 위해서는 앱을 실행하는 데 최소한의 권한이 필요하며 사용자에게 진행 상황에 대한 가장 많은 제어와 피드백을 제공합니다. 단점은 다음에 프로그램에서 해당 화면을 볼 때 이미 선택된 확인란을 표시할지 여부를 결정하는 것이 조금 더 어렵다는 것입니다.
  2. HKey_Current_User\Software\Microsoft\Windows\CurrentVersion\Run레지스트리 키에 추가하십시오 . 여기서 유일한 문제는 레지스트리에 대한 쓰기 권한이 필요하다는 것인데, 항상 사용할 수있는 것은 아닙니다.
  3. 사용자 로그인시 트리거되는 예약 된 작업 만들기
  4. HKey_Local_Machine\Software\Microsoft\Windows\CurrentVersion\Run레지스트리 키에 추가하십시오 . 여기서 유일한 문제는 레지스트리에 대한 쓰기 권한이 필요하다는 것인데, 항상 사용할 수있는 것은 아닙니다.
  5. Windows 서비스로 설정하십시오. 오직 당신 만이 경우이 작업을 수행 정말 그것을 의미, 그리고 당신이이 프로그램을 실행하려는 당신이 알고있는 모든 컴퓨터의 사용자를.

이 대답은 이제 더 오래되었습니다. 이 글을 쓴 이후로 Windows 10이 출시되어 Startup폴더를 포함하여 시작 메뉴 폴더의 작동 방식이 변경되었습니다 . Windows가 이러한 위치에 사용하는 내부 데이터베이스를 참조하지 않고 해당 폴더에서 파일을 추가하거나 제거하는 것이 얼마나 쉬운 지 아직 명확하지 않습니다.


너무 빨리 응답 해주신 모든 분들께 감사드립니다. Joel, 옵션 2를 사용하고 현재 사용자의 "Run"폴더에 레지스트리 키를 추가했습니다. 관심있는 다른 사람을 위해 사용한 코드는 다음과 같습니다.

    using Microsoft.Win32;
    private void SetStartup()
    {
        RegistryKey rk = Registry.CurrentUser.OpenSubKey
            ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

        if (chkStartUp.Checked)
            rk.SetValue(AppName, Application.ExecutablePath);
        else
            rk.DeleteValue(AppName,false);            

    }

"HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Run"에 레지스트리 항목을 만들 수 있습니다. Vista에서는 다르게 작동 할 수 있습니다. UAC로 인해 설정이 "가상화"될 수 있습니다.


Windows Vista, 7, 8, 10의 시작 프로그램에 프로그램을 추가하는 방법은 다음과 같습니다.

  • 파일 경로

C:\Users\Bureau Briffault\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup (작업 관리자에서 볼 수 있음, 현재 사용자 로그인 성공시 실행 중, 관리자 권한 필요 없음)

C:\Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup (작업 관리자에서 볼 수 있음, 모든 사용자 로그인 성공시 실행, 관리자 권한 필요)


  • 레지스트리 경로

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run (작업 관리자에서 볼 수 있음, 현재 사용자 로그인 성공시 실행 중, 관리자 권한 필요 없음)

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce (작업 관리자에 표시되지 않음, 현재 사용자 로그인 성공시 실행 중, 한 번의 로그인 시간 동안 실행 중, 관리자 권한 필요 없음)

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run (작업 관리자에서 볼 수 있음, 모든 사용자 로그인 성공시 실행, 관리자 권한 필요)

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce (작업 관리자에서 볼 수 없음, 모든 사용자 로그인 성공시 실행, 한 번의 로그인 시간 동안 실행, 관리자 권한 필요)


  • 작업 스케줄러

Microsoft.Win32.Taskscheduler.dll (작업 관리자에서 볼 수 없음, Windows 부팅시 실행, 관리자로 실행, 관리자 권한 필요)


응용 프로그램이 Windows가 시작될 때 시작되도록 설계된 경우 (사용자가 로그인 할 때가 아니라) 유일한 옵션은 Windows 서비스를 포함하는 것입니다. 애플리케이션을 서비스로 작성하거나 애플리케이션을 시작하기 위해서만 존재하는 간단한 서비스를 작성하십시오.

쓰기 서비스는 까다로울 수 있으며 특정 경우에 허용되지 않는 제한을 부과 할 수 있습니다. 일반적인 디자인 패턴 중 하나는 작업을 수행하는 서비스와 사용자에게 정보를 표시하기 위해 서비스와 통신하는 애플리케이션 프런트 엔드가있는 프런트 엔드 / 백 엔드 쌍입니다.

반면에 사용자 로그인으로 응용 프로그램을 시작하려면 Joel Coehoorn이 나열한 방법 1 또는 2를 사용할 수 있습니다.


Xepher Dotcom의 답변 외에도 Windows Startup의 폴더 경로는 다음과 같이 코딩되어야합니다.

var Startup = Environment.GetFolderPath(Environment.SpecialFolder.Startup);

너무 쉬운 솔루션입니다.

추가하려면

Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
key.SetValue("Your Application Name", Application.ExecutablePath);

제거

Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
key.DeleteValue("Your Application Name", false);

    /// <summary>
    /// Add application to Startup of windows
    /// </summary>
    /// <param name="appName"></param>
    /// <param name="path"></param>
    public static void AddStartup(string appName, string path)
    {
        using (RegistryKey key = Registry.CurrentUser.OpenSubKey
            ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
        {
            key.SetValue(appName, "\"" + path + "\"");
        }
    }

    /// <summary>
    /// Remove application from Startup of windows
    /// </summary>
    /// <param name="appName"></param>
    public static void RemoveStartup(string appName)
    {
        using (RegistryKey key = Registry.CurrentUser.OpenSubKey
            ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
        {
            key.DeleteValue(appName, false);
        }
    }

시작 폴더에 바로 가기를 추가하는 것이 가장 쉬운 방법이라는 것을 알았습니다. "Windows Script Host Object Model"및 "Microsoft.CSharp"에 대한 참조를 추가 한 다음이 코드를 사용했습니다.

IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell();
string shortcutAddress = Environment.GetFolderPath(Environment.SpecialFolder.Startup) + @"\MyAppName.lnk";
System.Reflection.Assembly curAssembly = System.Reflection.Assembly.GetExecutingAssembly();

IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(shortcutAddress);
shortcut.Description = "My App Name";
shortcut.WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory;
shortcut.TargetPath = curAssembly.Location;
shortcut.IconLocation = AppDomain.CurrentDomain.BaseDirectory + @"MyIconName.ico";
shortcut.Save();

Microsoft 네임 스페이스의 win32 클래스를 사용하여이 작업을 수행 할 수 있습니다.

using Microsoft.Win32;

using (RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
 {
            key.SetValue("aldwin", "\"" + Application.ExecutablePath + "\"");
 }

참고 URL : https://stackoverflow.com/questions/674628/how-do-i-set-a-program-to-launch-at-startup

반응형