Member 12386982 Ответов: 2

Автоматический запуск приложения


Я хочу бежать C#.net применение автоматически с интервалом в две минуты.Мой код приведен ниже

Что я уже пробовал:

<pre lang="c#">
//Form1.cs
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
using Microsoft.Win32;

namespace AutoBackup
{
    public partial class Form1 : Form
    {
        Backup objBackup = new Backup();
        NotifyIcon notifyIcon = new NotifyIcon();
        RegistryKey reg = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce", true);
        public Form1()
        {
            InitializeComponent();
            Thread splashthread = new Thread(new ThreadStart(objBackup.backup));
            splashthread.IsBackground = true;
           

            try
            {
                //objBackup.IPAddress();
                System.Timers.Timer BackUpTimer = new System.Timers.Timer();
                BackUpTimer.Interval = Convert.ToInt32(2000);
                
                //replicationTimer.Interval = 300000;
                BackUpTimer.Elapsed += new System.Timers.ElapsedEventHandler(MyTimer_Elapsed);
                BackUpTimer.Start();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        private void MyTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            
        }

    }
}




//Backup.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Xml;

namespace AutoBackup
{
    public class Backup
    {
        string path = Environment.GetFolderPath(Environment.SpecialFolder.Personal);      
        public void backup()
        {
            using (XmlWriter writer = XmlWriter.Create(path+"\\BackupDetails.xml"))
            {
                writer.WriteStartElement("Backups");
                
                writer.WriteElementString("Time", DateTime.Now.ToString());
                
                writer.WriteEndElement();
                writer.Flush();
            }
        }
    }
}


Пожалуйста, помогите..

2 Ответов

Рейтинг:
1

OriginalGriff

Изменить это:

BackUpTimer.Interval = Convert.ToInt32(2000);
До настоящего времени:
BackUpTimer.Interval = Convert.ToInt32(2000 * 60);


Member 12386982

не работать

phil.o

Что значит "не работает" означает? Interval выражается в виде числа миллисекунды, поэтому, когда вы указываете 2000 МС, это означает 2 с. И ничего не делается по тиканью таймера, иначе вы его не показывали.
Пожалуйста, помогите нам помочь вам и предоставить гораздо более разумную информацию, чем общее "не работает".

OriginalGriff

"Это не работает", вероятно, самый бесполезный отчет о проблеме, который мы получаем - и мы получаем его много. Она ничего не говорит нам о том, что происходит или когда это происходит.
Итак, расскажите нам, что он делает, чего вы не ожидали, или не делает, что вы сделали.
Расскажите нам, что вы сделали, чтобы это произошло.
Сообщайте нам о любых сообщениях об ошибках.

phil.o

Convert.ToInt32(2000 * 60)
Гул... :)

OriginalGriff

Да... Я думаю, что операция немного не в его духе ...

phil.o

:)

Member 12386982

сэр...элемент управления не входит в класс резервного копирования.. для редактирования xml-файла... я хочу автоматическое редактирование.. плз помогите

phil.o

Пожалуйста, смотрите решение 2. Ваш обработчик событий или, по крайней мере, то, что вы показали из него, в данный момент ничего не делает. Вы забыли использовать в нем свой резервный класс?

OriginalGriff

Это все равно не рассказать нам что-нибудь!

Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы получаем только то, что вы печатаете для работы.
Итак, расскажите нам, откуда вы знаете, что происходит, что вы пытались сделать, чтобы выяснить, почему, что произошло, когда вы это сделали. И перестаньте пытаться печатать как можно меньше - это не поможет ни вам, ни нам. Если вы не дадите нам актуальную информацию для работы, Все, что мы можем сделать, это продолжать идти "и? Что случилось?" и это отнимает ваше и наше время.

Помогите нам помочь вам!

Member 12386982

сэр, я хочу запустить свое приложение автоматически через определенные промежутки времени, например через 2 минуты. и отредактируйте xml-файл с текущим временем. поэтому я использовал нить и таймер. я создал форму и класс ( backup.cs ).


//Код формы
использование системы;
использование системы.Коллекции.Общий;
использование системы.ComponentModel;
использование System.Data;
использование системы.Рисование;
использование System.Linq;
использование System.Text;
использование системы.Нарезание резьбы.Задачи;
использование системы.Окна.Формы;
использование системы.Нарезание резьбы;
с помощью Microsoft.С Win32;

пространство ь
{
общественности частичного класс form1 : форма
{
Резервное копирование objBackup = новый резервного копирования();
NotifyIcon notifyIcon = новый NotifyIcon();
Объект registrykey Рег = регистр.Текущий пользователь.OpenSubKey("Software\корпорация Майкрософт\каталог\Windows\\CurrentVersion равное\\однократный запуск", правда);
открытый form1()
{
reg.SetValue("DBTool", приложение.Исполняемый путь.Метод toString());
метод InitializeComponent();
Thread splashthread = new Thread(new ThreadStart(objBackup.резервная копия));
брызгун.IsBackground = true;


пробовать
{
//objBackup.Адрес();
Система.Таймеры.Таймер BackUpTimer = новая система.Таймеры.Таймер();
BackUpTimer.Интервал = Преобразование.ToInt32(2000 * 60 );
BackUpTimer.Истекшее время += новая система.Таймеры.ElapsedEventHandler(MyTimer_Elapsed);
BackUpTimer.Начать();
}
поймать (исключение бывший)
{
Ящик для сообщений.Показать(напр.сообщение);
}
}
частная MyTimer_Elapsed недействительным(объект отправителя, система.Таймеры.ElapsedEventArgs е)
{
objBackup.резервная копия();
}

}
}




//Код резервного класса
использование системы;
использование системы.Коллекции.Общий;
использование System.Linq;
использование System.Text;
использование системы.Нарезание резьбы.Задачи;
использование системы.ИО;
использование System.Xml;

пространство ь
{
резервная копия открытого класса
{
строка path = Environment.GetFolderPath(Environment.Специальная папка.Личный);
резервный общественного недействительными ()
{
использование (XmlWriter writer = XmlWriter.Создать(путь+"\\BackupDetails.xml"))
{
писатель.WriteStartElement("Резервные Копии");
писатель.WriteElementString("Time", DateTime.Now.ToString());
писатель.WriteEndElement();
писатель.Промывать();
}
}
}
}

Member 12386982

моя проблема заключается в том, что элемент управления даже не входит в класс резервного копирования при первом запуске. о чем я уже упоминал
Thread splashthread = new Thread(new ThreadStart(objBackup.резервная копия));

OriginalGriff

Конечно, это не так - вы же не говорили ему об этом!
У вас нет метода конструктора класса, поэтому создание нового экземпляра резервной копии автоматически не выполняет ни один из ваших кодов, и ваш поток никогда не запускается.

Что показывает отладчик, когда выполняется ваш истекший обработчик?

Member 12386982

я изменил код формы, как показано ниже.. так что элемент управления входит в класс..

открытый form1()
{
reg.SetValue("DBTool", приложение.Исполняемый путь.Метод toString());
метод InitializeComponent();
Thread splashthread = new Thread(new ThreadStart(objBackup.резервная копия));
брызгун.IsBackground = true;
брызгун.Начать();

пробовать
{
//objBackup.Адрес();
Система.Таймеры.Таймер BackUpTimer = новая система.Таймеры.Таймер();
BackUpTimer.Интервал = Преобразование.ToInt32(2000 * 60 );
BackUpTimer.Истекшее время += новая система.Таймеры.ElapsedEventHandler(MyTimer_Elapsed);
BackUpTimer.Начать();
}
поймать (исключение бывший)
{
Ящик для сообщений.Показать(напр.сообщение);
}
}

Member 12386982

теперь я хочу запустить приложение автоматически.. пожалуйста, помогите..

OriginalGriff

Ты каждый раз показываешь нам одно и то же, ты не говоришь нам ничего полезного или даже нового.

Сделай шаг назад, забудь код. Я сижу перед своим компьютером. Я установил ваше готовое приложение и ничего о нем не знаю. Я перезагрузил свой компьютер, и у меня есть совершенно пустой экран, за исключением значка вашего приложения на моем рабочем столе. Что я должен сделать теперь, и что я должен ожидать?

Member 12386982

после того, как вы установили мое приложение, оно будет работать автоматически, когда вы на своем компьютере. и будет автоматически запускаться через определенный промежуток времени и обновлять xml-файл (обновление текущего времени).

https://drive.google.com/file/d/1XCyYkLf7pwb-mIb3WIAoT0t9cU6tYwGL/view?usp=sharing

ссылка содержит мое приложение

OriginalGriff

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

Member 12386982

как я должен это делать.

OriginalGriff

А что вы пробовали?

Member 12386982

я не знаю, как это сделать ... я много гуглил..

Member 12386982

Пожалуйста, помогите...

Рейтинг:
0

TheRealSteveJudge

Это также может быть хорошей идеей, чтобы на самом деле вызвать процедуру резервного копирования в

MyTimer_Elapsed
обработчик событий.

напр.
Backup myBackup = new Backup();
myBackup.backup();

Ваш текущий обработчик событий в данный момент ничего не делает!