Как я должен удалить автозапуск на моем компьютере - PullRequest
0 голосов
/ 18 октября 2011

Я создал пример приложения с именем (WindowStartup.EXE), которое отображает имя компьютера, версию ОС и пользователя, вошедшего в систему. Это приложение также состоит из режима автоматического запуска при запуске компьютера. Пожалуйста, смотрите ниже коды. Код написан на C #

private void InfoWindow_Load(object sender, EventArgs e)
{
    lblMachineName.Text = Environment.MachineName.ToString();
    lblOSVersion.Text = Environment.OSVersion.ToString();
    lblUserlogged.Text = Environment.UserName.ToString();
    this.Top = Screen.PrimaryScreen.WorkingArea.Bottom - this.Height;
    this.Left = Screen.PrimaryScreen.WorkingArea.Right - this.Width;

    if (StartUp()) StartUpSystem();
}

private bool StartUp()
{
    bool retVal = false;
    if (File.Exists(Application.StartupPath + "\\SystemFile.txt"))
    {
        //read text file if content is true
        Stream file = new FileStream(Application.StartupPath + "\\SystemFile.txt", FileMode.Open, FileAccess.Read);
        StreamReader reader = new StreamReader(file);
        string content = reader.ReadToEnd();
        if (content == "true") retVal = true;
    }
    return retVal;
}

private void StartUpSystem()
{
    RegistryKey regApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
    if (IsStartupItem())
    {
        //--> Add the value in the registry so that the application runs at startup
        regApp.SetValue("WindowStartup.EXE", Application.ExecutablePath.ToString()); 

    }
}

private bool IsStartupItem()
{
    // The path to the key where Windows looks for startup applications
    RegistryKey regApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

    if (regApp.GetValue("WindowStartup.EXE") == null)
        // The value doesn't exist, the application is not set to run at startup
        return false;
    else
        // The value exists, the application is set to run at startup
        return true;
}

После создания установщика и его установки на моем компьютере, он работает без ошибок. Но после удаления этого примера приложения оно все равно появляется при каждом запуске компьютера.

Я попробую приведенный ниже код, чтобы удалить значение из реестра, но кажется, что он не работает

private void StartUpSystem()
{
    RegistryKey regApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
    if (!IsStartupItem())
    {
        //--> Remove the value from the registry so that the application doesn't start
        regApp.DeleteValue("WindowStartup.EXE", false); 

    }
}

Может ли кто-нибудь помочь мне, как я могу удалить это программно?

Ответы [ 2 ]

1 голос
/ 18 октября 2011
    private void DeleteRegistryKey()
    {
        using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run", true))
        {
            if (null != key && IsStartupItem())
            {
                key.DeleteValue("MyApp");
            }
        }
    }

    private bool IsStartupItem()
    {
        // The path to the key where Windows looks for startup applications
        RegistryKey regApp = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);

        if (regApp.GetValue("MyApp") == null)
            // The value doesn't exist, the application is not set to run at startup
            return false;
        else
            // The value exists, the application is set to run at startup
            return true;
    }

    private static void SetRegistry(string path)
    {
        if (!IsStartupItem())
        {
            Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", "MyApp", path);
        }
    }
1 голос
/ 18 октября 2011

Разве это не будет:

if(IsStartupItem())  //rather than !IsStartupItem() ?
...