我该如何删除计算机中的自动运行功能

时间:2011-10-18 07:53:41

标签: c# autorun

我创建了一个名为(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 个答案:

答案 0 :(得分:1)

那不是:

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

答案 1 :(得分:1)

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