Pergunta

I have created a sample application named (WindowStartup.EXE) that display the Computer name, OS version and user logged in. This application is also consist of auto run behavior upon starting the machine. Please see below codes. Code is written on 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;
}

After creating an installer and installing it in my machine, it runs without an error. But upon uninstalling this sample application, it still pop-up every time i start my machine.

I'll try the below code to remove the value from the registry but it seems that it's not working

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); 

    }
}

Can anyone help me on how can I remove it programmatically?

Foi útil?

Solução

    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);
        }
    }

Outras dicas

Wouldn't that be:

if(IsStartupItem())  //rather than !IsStartupItem() ?
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top