重新启动系统后恢复C#应用程序

重新启动系统后恢复C#应用程序,c#,wpf,C#,Wpf,我编写了一个简单的c#wpf代码,如下所示 public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Window_Loaded(object sender, RoutedEventArgs e) { label1.Content = "Before restart";

我编写了一个简单的c#wpf代码,如下所示

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

    }
   private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        label1.Content = "Before restart";
        System.Diagnostics.Process.Start("ShutDown", "-r"); //restart
        label2.Content = "After restart";

    }
}


现在的问题是,我想在重启后自动恢复我的应用程序,并将消息显示为“重启后”。请帮助我如何做到这一点

您有两种选择:将应用程序添加到启动文件夹,或将appropiate键添加到Windows注册表中的run键


此问题的解决方案是在硬盘或某些永久内存(如自定义事务文件)中维护状态

例如

申请将有不同的阶段。我将进入每个阶段后处理成文件。一旦机器停止,那么如果应用程序自动启动,它将从该文件中读取阶段,然后从该阶段进行处理

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    //Read stage from transaction file as **Stage**
    if(Stage == Stage1)
    {
        label1.Content = "Before restart";
        WriteTransaction(Stage2);
    }
    System.Diagnostics.Process.Start("ShutDown", "-r"); //restart
    if(Stage == Stage2)
    {
        label2.Content = "After restart";
        //Finish transaction and delete the transaction file.
    }

}
这样你就可以解决这个问题

要自动重新启动应用程序,您可以将可执行文件放在“启动”文件夹下,甚至可以考虑将其设置为windows服务

这里有一个概念(伪代码):


您是否已将应用程序放入
AutoStart
文件夹或
Run
注册表项或任何类似项中?“我想在重新启动后自动恢复应用程序”-解释。例如,如果您正在构建一个POS终端,您可能需要查看kiosk模式。无论如何,你不能在任意点恢复应用程序,你必须在关机时存储状态,然后在重新启动后恢复。这不是全部事实。重新启动后,它不会显示“重新启动后”,而是“重新启动前”。谢谢您宝贵的建议。我将尝试将应用程序的状态放在一些文本或XML文件中。我可以知道如何将我的可执行文件置于“启动”下以重新启动我的应用程序吗?
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    // initialize defaults
    bool isRestarted = false;
    label1.Content = "";
    label2.Content = "";

    // Check the state
    if (stateFile.Exists) // stateFile is something like type FileInfo
    {
        var text = File.ReadAllText(stateFile.FullName);
        isRestarted = ParseForBool(text);
        label1.Content = ParseForLabel(text); // if you want that to be restored as well
    }

    if (isRestarted)
    {
        label2.Content = "After restart";
        DoSomeMagicRemoveAutostart(); // just if you want to restart only once
    }
    else
    {
        label1.Content = "Before restart";
        stateFile.Write(true); // is restarted
        stateFile.Write(label1.Content); // if you want to restore that as well
        DoSomeMagicAutoStartOperation(); // TODO: Autostart folder or Registry key
        System.Diagnostics.Process.Start("ShutDown", "-r"); //restart
    }
}