it-swarm.com.de

Wie führt man eine C # -Anwendung beim Windows-Start aus?

Ich habe eine Anwendung erstellt, die während des Startvorgangs mit dem nächsten Code unten gestartet wird.
Der Prozess wird auf dem Prozessmanager-Tool nach dem Neustart ausgeführt, aber ich kann die Anwendung auf dem Bildschirm nicht sehen. Wenn ich dieselbe .exe-Datei über den Startwert der Registrierungswerte öffne, wird das Programm perfekt ausgeführt .

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

// Add the value in the registry so that the application runs at startup
rkApp.SetValue("MyApp", Application.ExecutablePath.ToString());

Was kann ich tun, um das Problem zu beheben?

57
bloodix

Code ist hier (win form app):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;

namespace RunAtStartup
{
    public partial class frmStartup : Form
    {
        // The path to the key where Windows looks for startup applications
        RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

        public frmStartup()
        {
            InitializeComponent();
            // Check to see the current state (running at startup or not)
            if (rkApp.GetValue("MyApp") == null)
            {
                // The value doesn't exist, the application is not set to run at startup
                chkRun.Checked = false;
            }
            else
            {
                // The value exists, the application is set to run at startup
                chkRun.Checked = true;
            }
        }

        private void btnOk_Click(object sender, EventArgs e)
        {
            if (chkRun.Checked)
            {
                // Add the value in the registry so that the application runs at startup
                rkApp.SetValue("MyApp", Application.ExecutablePath);
            }
            else
            {
                // Remove the value from the registry so that the application doesn't start
                rkApp.DeleteValue("MyApp", false);
            }
        }
    }
}
55
Adrew

Versuchen Sie diesen Code

private void RegisterInStartup(bool isChecked)
{
    RegistryKey registryKey = Registry.CurrentUser.OpenSubKey
            ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
    if (isChecked)
    {
        registryKey.SetValue("ApplicationName", Application.ExecutablePath);
    }
    else
    {
        registryKey.DeleteValue("ApplicationName");
    }
}

Quelle: http://www.dotnetthoughts.net/2010/09/26/run-the-application-at-windows-startup/

33
Anuraj

Sie können versuchen, eine Verknüpfung zu Ihrer Anwendung in den Startordner zu kopieren, anstatt der Registrierung Dinge hinzuzufügen. Den Pfad erhalten Sie mit Environment.SpecialFolder.Startup. Dies ist in allen .NET-Frameworks seit 1.1 verfügbar.

Alternativ, vielleicht diese Seite wird für Sie hilfreich sein, listet es viele verschiedene Möglichkeiten auf, wie Sie eine Anwendung zum automatischen Starten erhalten.

16
Phil Gan
public class StartUpManager
{
    public static void AddApplicationToCurrentUserStartup()
    {
        using (RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
        {
            key.SetValue("My ApplicationStartUpDemo", "\"" + System.Reflection.Assembly.GetExecutingAssembly().Location + "\"");
        }
    }

    public static void AddApplicationToAllUserStartup()
    {
        using (RegistryKey key =     Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
        {
            key.SetValue("My ApplicationStartUpDemo", "\"" + System.Reflection.Assembly.GetExecutingAssembly().Location + "\"");
        }
    }

    public static void RemoveApplicationFromCurrentUserStartup()
    {
         using (RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
         {
             key.DeleteValue("My ApplicationStartUpDemo", false);
         }
    }

    public static void RemoveApplicationFromAllUserStartup()
    {
        using (RegistryKey key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
        {
            key.DeleteValue("My ApplicationStartUpDemo", false);
        }
    }

    public static bool IsUserAdministrator()
    {
        //bool value to hold our return value
        bool isAdmin;
        try
        {
            //get the currently logged in user
            WindowsIdentity user = WindowsIdentity.GetCurrent();
            WindowsPrincipal principal = new WindowsPrincipal(user);
            isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
        }
        catch (UnauthorizedAccessException ex)
        {
            isAdmin = false;
        }
        catch (Exception ex)
        {
            isAdmin = false;
        }
        return isAdmin;
    }
}

sie können den ganzen Artikel hier einsehen

9
Rashid Malik

zuerst habe ich den folgenden Code ausprobiert und er hat nicht funktioniert

RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
rkApp.SetValue("MyAPP", Application.ExecutablePath.ToString());

Dann habe ich CurrentUser mit LocalMachine geändert und es funktioniert

RegistryKey rkApp = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
rkApp.SetValue("MyAPP", Application.ExecutablePath.ToString());
1
srcnaks

Ich habe keinen der oben genannten Codes gefunden. Möglicherweise liegt das daran, dass meine App .NET 3.5 ausführt. Ich weiß es nicht. Der folgende Code hat für mich perfekt funktioniert. Ich habe dies von einem erfahrenen .NET-App-Entwickler in meinem Team erhalten. 

 Write (Microsoft.Win32.Registry.LocalMachine, @ "SOFTWARE\Microsoft\Windows\CurrentVersion\Run \", "WordWatcher", "\" "+ Application.ExecutablePath.ToString () +"\"")); 
public bool Write(RegistryKey baseKey, string keyPath, string KeyName, object Value)
{
    try
    {
        // Setting 
        RegistryKey rk = baseKey;
        // I have to use CreateSubKey 
        // (create or open it if already exits), 
        // 'cause OpenSubKey open a subKey as read-only 
        RegistryKey sk1 = rk.CreateSubKey(keyPath);
        // Save the value 
        sk1.SetValue(KeyName.ToUpper(), Value);

        return true;
    }
    catch (Exception e)
    {
        // an error! 
        MessageBox.Show(e.Message, "Writing registry " + KeyName.ToUpper());
        return false;
    }
}
1
user1000008

1- Namensraum hinzufügen:

using Microsoft.Win32;

2-Add-Antrag zur Registrierung:

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

3 - wenn Sie die App aus der Registrierung löschen möchten:

key.DeleteValue("your_app_name",false);
0
mamal

Eine Open-Source-Anwendung mit dem Namen "Startup Creator" konfiguriert Windows-Startup durch Erstellen eines Skripts und bietet eine einfach zu bedienende Benutzeroberfläche. Durch den Einsatz von leistungsstarkem VBScript können Anwendungen oder Dienste in festgelegten Verzögerungsintervallen und in derselben Reihenfolge gestartet werden. Diese Skripts werden automatisch in Ihrem Startordner abgelegt und können für spätere Änderungen wieder geöffnet werden.

http://startupcreator.codeplex.com/

0
Jake Soenneker

Wenn Sie den automatischen Start Ihrer Anwendung nicht festlegen konnten, können Sie versuchen, diesen Code in das Manifest einzufügen

<requestedExecutionLevel  level="asInvoker" uiAccess="false" />

oder Manifest löschen Ich hatte es in meiner Anwendung gefunden

0
William Wild

für WPF: (wobei lblInfo ein Label ist, chkRun ein CheckBox)

this.Topmost dient nur dazu, meine App oben in anderen Fenstern zu halten, Sie müssen außerdem eine using-Anweisung hinzufügen " using Microsoft.Win32; ", StartupWithWindows ist der Name meiner Anwendung

public partial class MainWindow : Window
    {
        // The path to the key where Windows looks for startup applications
        RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

        public MainWindow()
        {
            InitializeComponent();
            if (this.IsFocused)
            {
                this.Topmost = true;
            }
            else
            {
                this.Topmost = false;
            }

            // Check to see the current state (running at startup or not)
            if (rkApp.GetValue("StartupWithWindows") == null)
            {
                // The value doesn't exist, the application is not set to run at startup, Check box
                chkRun.IsChecked = false;
                lblInfo.Content = "The application doesn't run at startup";
            }
            else
            {
                // The value exists, the application is set to run at startup
                chkRun.IsChecked = true;
                lblInfo.Content = "The application runs at startup";
            }
            //Run at startup
            //rkApp.SetValue("StartupWithWindows",System.Reflection.Assembly.GetExecutingAssembly().Location);

            // Remove the value from the registry so that the application doesn't start
            //rkApp.DeleteValue("StartupWithWindows", false);

        }

        private void btnConfirm_Click(object sender, RoutedEventArgs e)
        {
            if ((bool)chkRun.IsChecked)
            {
                // Add the value in the registry so that the application runs at startup
                rkApp.SetValue("StartupWithWindows", System.Reflection.Assembly.GetExecutingAssembly().Location);
                lblInfo.Content = "The application will run at startup";
            }
            else
            {
                // Remove the value from the registry so that the application doesn't start
                rkApp.DeleteValue("StartupWithWindows", false);
                lblInfo.Content = "The application will not run at startup";
            }
        }

    }
0
shakram02