2014-01-10 2 views
0

Я написал простой C# WPF код, как показано ниже,Возобновление приложения # C после перезагрузки системы

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

    } 

}

Теперь проблема я хотел возобновить мое приложение автоматически после перезагрузки и и отображения сообщения, как «После перезагрузки». Пожалуйста, помогите мне, как достичь этого ...

+1

Вы кладете приложения в 'папку AutoStart' или' Run' ключ реестра или что-либо подобное? –

+2

_ «Я хотел возобновить свое приложение автоматически после перезапуска» _ - пояснить. Если вы, например, строите POS-терминал, вы можете посмотреть в режиме киоска. Вы не можете просто возобновить приложение в произвольной точке в любом случае, вам нужно будет сохранить состояние при завершении работы и восстановить его после перезапуска. – CodeCaster

ответ

-1

У вас есть два варианта: добавление приложения в папку «Автозагрузка» или добавление соответствующего ключа в ключ запуска в реестре Windows.

http://msdn.microsoft.com/en-us/library/aa376977(v=vs.85).aspx

+0

Это не полная правда. После перезапуска не отображается «После перезапуска», но «Перед перезагрузкой». –

2

Решение этой проблемы является поддержание состояния жесткого диска или какой-либо постоянной памяти, как файл пользовательских транзакций.

См., Например,

В приложении будет разный этап. Я буду вводить каждый этап после обработки в файл. одна машина останавливается, а затем, если приложение запускается автоматически, он будет читать сцену из этого файла, а затем обрабатывать с этого этапа.

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.

+0

Благодарим вас за ценное предложение. Я пытаюсь поместить состояние приложения в некоторый текстовый или XML-файл. Могу ли я узнать, как запустить мои исполняемые файлы, чтобы перезапустить мое приложение? – Anita

0

Вот концепция (псевдо-код):

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 
    } 
} 
Смежные вопросы