Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5

Переделать приложение в службу

06.02.2013, 23:50. Показов 2349. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Помогите, пожалуйста, с сабжем. Программа логинится на сайт, после этого засыпает на N часов, после этого все повторяется. Запускается все это в фоновом потоке, поэтому закрыть приложение можно спокойно. Работает и так (закинул ярлык в автозагрузку и ок), но хотелось бы потренироваться. Вот исходный код: любые предложения по сабжу/по улучшению в целом принимаются с радостью.
program.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System;
using System.Threading;
using System.Windows.Forms;
using POSTLogin.Properties;
 
namespace POSTLogin
{
    static class Program
    {
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        [STAThread]
        static void Main()
        {
            bool createdNew;
            new Mutex(true, Resources.MutexName, out createdNew);
            if (!createdNew)
            {   
                MessageBox.Show("Another copy is working");
                return;
            }
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            MessageBox.Show("Started");
            Application.Run(new Launcher());
        }
    }
}
launcher.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
using System.ComponentModel;
using System.Threading;
using POSTLogin.Properties;
using xNet.Net;
using xNet.Collections;
using System.IO;
using System.Windows.Forms;
 
namespace POSTLogin
{
    public class Launcher : ApplicationContext
    {
        private readonly POSTLoginer postLoginer;
        private BackgroundWorker worker;
        private const int SecondsInHour = 3600, SecondsToMilliseconds = 1000, N = 3;
        
        public Launcher()
        {
            postLoginer = new POSTLoginer(Resources.sitename, Resources.Login, Resources.Password);
            Start();
        }
 
        private void Login()
        {
            worker = new BackgroundWorker {WorkerSupportsCancellation = true};
            worker.DoWork += (sender, args) =>
                {
                    postLoginer.Execute();
                    Thread.Sleep(N*SecondsInHour*SecondsToMilliseconds);
                };
            worker.RunWorkerCompleted += (sender, args) => Login();
            worker.RunWorkerAsync();
        }
 
        public void Start()
        {
            Login();
        }
 
        public void Stop()
        {
            worker.CancelAsync();
        }
    }
 
    public class POSTLoginer
    {
        private readonly string sitename, login, password;
        private string result;
 
        public POSTLoginer(string sitename, string login, string password)
        {
            this.sitename = sitename;
            this.login = login;
            this.password = password;
        }
 
        public string Execute()
        {
            var cookies = new CookieDictionary();
            string agent = HttpHelper.RandomUserAgent();
            using (var req = new HttpRequest())
            {
                req["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                req.Cookies = cookies;
                req["DNT"] = "1";
                req.UserAgent = agent;
                req.Referer = Resources.sitename;
                var part = new StringDictionary();
                part["step"] = "1";
                part["login"] = "1";
                part["url"] = "";
                part["auth_name"] = login;
                part["auth_pass"] = password;
                part["auth_domain"] = "";
                part["auth_pass1"] = "";
                part["auth_remember"] = "on";
                result = req.Post(sitename, part).ToString();
            }
            return result;
        }
 
        public void SaveMainPage()
        {
            var cookies = new CookieDictionary();
            string agent = HttpHelper.RandomUserAgent();
            using (var req = new HttpRequest())
            {
                req["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                req.Cookies = cookies;
                req["DNT"] = "1";
                req.UserAgent = agent;
                string text = req.Get(Resources.sitename).ToString();
                using (var sw = new StreamWriter("page_home.html"))
                    sw.Write(text);
            }
        }
 
        public void SaveToFile()
        {
            File.WriteAllText("page_login.html", result);
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.02.2013, 23:50
Ответы с готовыми решениями:

Переделать процесс под службу
Есть маленькая консольная программка, строчек на 40. Как переделать её в службу и запускать действия в этой службе в определенное...

И как добавить в приложение WPF ссылку на службу
Здравствуйте. У меня есть такое задание: создать WPF-приложение, при помощи Indigo создать веб-сервис, размещённый на ASP.NET Development...

Переделать консольное приложение в приложение Windows Forms
Дорогие друзья пожалуйста помогите в консольным приложением. У меня есть код, но он под консольное приложение, а мне надо для Windows Form....

4
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
09.02.2013, 14:06
Самому сервисы никогда не приходилось писать, но вот вроде как полезная статейка:
http://www.codeproject.com/Art... rvice-in-C

Цитата Сообщение от Psilon Посмотреть сообщение
C#
1
new Mutex(true, Resources.MutexName, out createdNew);
При включенной оптимизации этот мьютекс сожрет сборщик мусора при первом же обходе, что позволит запустить множество копий приложения.
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
09.02.2013, 22:19  [ТС]
kolorotur, не уверен (используется out-параметр же), надо будет проверить ).
За статейку спасибо.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
09.02.2013, 23:10
Цитата Сообщение от Psilon Посмотреть сообщение
не уверен (используется out-параметр же)

Булеан тут как раз не при чем - он в стэке живет.
А вот созданный "в никуда" мьютекс при включенной оптимизации подчистится, ага. То есть будет возможность создать другой мьютекс с тем же именем и запустить вторую (третью, десятую) копию приложения.
1
 Аватар для Yukikaze
352 / 331 / 49
Регистрация: 12.12.2011
Сообщений: 563
10.02.2013, 00:49
Psilon,
kolorotur, таки да, сожрет. GC.KeepAlive
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.02.2013, 00:49
Помогаю со студенческими работами здесь

Как переделать консольное приложение в приложение с GUI?
Есть приложение, работающее в консоли, захотелось сделать с графическим интерфейсом, уперся в непонимание) Объясните, как: а) заменить...

переделать консольное приложение табулирования в приложение с формой
Помогите пожалуйста переделать консольное приложение табулирования в приложение с формой,где результат выводится в мемо вот код...

Создать в среде MSVS C + + консольное приложение , реализующее веб -службу с использованием библиотеки gSOAP
Если можно - сделайте в коде комменты к каждой строке, пожалуйста, с подробным объяснением а-ля для тупых. Почему и как, какие заглавники...

Переделать приложение из exe в com
Как переделать из ехе в сом. Подскажите пожалуйста. .MODEL SMALL .STACK 64 .DATA PROMPT DB 'Input string',...

Переделать в консольное приложение
Всем привет.Кто может переделать в консольное приложение(delphi)? Знаю команды setlenth и т.д,но у меня не получается... Заранее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru