0

コンピューター名、OS のバージョン、およびログインしているユーザーを表示する (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); 

    }
}

プログラムで削除する方法について誰か助けてもらえますか?

4

2 に答える 2

1

そうではないでしょうか:

if(IsStartupItem())  //rather than !IsStartupItem() ?
于 2011-10-18T07:58:47.083 に答える
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);
        }
    }
于 2011-10-18T08:07:49.987 に答える