powered by simpleCommunicator - 2.0.57     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / попрос по службам windows
8 сообщений из 33, страница 2 из 2
попрос по службам windows
    #38136035
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noob123предположим что да
Как заметил ув. Изопропил, это очень плохо. Советую предполагать, что нет

noob123решение получается не универсальным
Универсального нет ничего в мире. Всегда есть решения более или менее удовлетворяющие заданным условиям. Если не заморачиваться с интерактивностью сервисов, а реально практически нет оснований делать его таким, то Environment.UserInteractive - это отличный выбор.

Лично у меня в основном все приложения - службы. но для удобства разработки я делаю их еще и консольными. И приложения работают одинаково вне зависимости от типа запуска:

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.
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.
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                if (Environment.UserInteractive)
                {
                    Console.WindowWidth = 150;

                    try
                    {
                        using (var _initiator = new SocketInitiator())
                        {
                            _initiator.start();

                            Console.WriteLine("Нажмите enter для завершения");
                            Console.Read();

                            _initiator.stop();
                        }
                    }
                    catch (Exception _e)
                    {
                        Console.WriteLine("Нажмите enter для завершения");
                        Console.Read();
                    }
                }
                else
                {
                    ServiceBase.Run(new ServiceBase[] {new GateService()});
                }
            }
            else
            {
                #region Управление сервисом

                if (args[0] == "-help")
                {
                    Console.WriteLine("-help");
                    Console.WriteLine("-install SERVICE_NAME");
                    Console.WriteLine("-uninstall SERVICE_NAME");
                }

                if (args[0] == "-install")
                {
                    string _serviceName = args[1];
                    using (ProjectInstaller _projectInstaller = new ProjectInstaller {Context = new InstallContext()})
                    {
                        _projectInstaller.Context.Parameters.Add("assemblypath", Process.GetCurrentProcess().MainModule.FileName);
                        foreach (Installer _installer in _projectInstaller.Installers)
                            _installer.Context = _projectInstaller.Context;

                        _projectInstaller.ServiceInstaller.ServiceName =
                            _projectInstaller.ServiceInstaller.DisplayName =
                                _projectInstaller.EventLogInstaller.Source = _serviceName;

                        IDictionary _dictionary = new Hashtable();
                        try
                        {
                            _projectInstaller.Install(_dictionary);
                            _projectInstaller.Commit(_dictionary);
                        }
                        catch (Exception _ex)
                        {
                            _projectInstaller.Rollback(_dictionary);
                        }
                    }
                }

                if (args[0] == "-uninstall")
                {
                    string _serviceName = args[1];
                    using (ProjectInstaller _projectInstaller = new ProjectInstaller {Context = new InstallContext()})
                    {
                        _projectInstaller.Context.Parameters.Add("assemblypath", Process.GetCurrentProcess().MainModule.FileName);
                        foreach (Installer _installer in _projectInstaller.Installers)
                            _installer.Context = _projectInstaller.Context;

                        _projectInstaller.ServiceInstaller.ServiceName =
                            _projectInstaller.ServiceInstaller.DisplayName =
                                _projectInstaller.EventLogInstaller.Source = _serviceName;
                        try
                        {
                            _projectInstaller.Uninstall(null);

                            fLogger.Info(string.Format("Сервис {0} деинсталлирован", _serviceName));
                        }
                        catch (Exception _ex)
                        {
                        }
                    }
                }
                #endregion
            }
        }
    }

...
Рейтинг: 0 / 0
попрос по службам windows
    #38136040
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noob123,

во, можно так сделать:
создать приложение UI и там спрашивать - как вы хотите работать?) Если как слжуба цепляемся к win-службе и вперед.
...
Рейтинг: 0 / 0
попрос по службам windows
    #38136047
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,

+100 к такому решению. Аналогично. Только Help и Install не всегда делаю)
...
Рейтинг: 0 / 0
попрос по службам windows
    #38136063
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noob123тебе не нужно, а кому то может и нужно. например мне.
Это не аргумент, это бред сивой кобылы из детского сада.

noob123если запустить тот же радмин (rserver3.exe) выскочит MessageBox с текстом: "Программа будет работать только как системная служба". все четко и красиво. а если запустить приложение мое, то вылезает большое окно "Невозможно запустить службу из командной строки или отладчика..." которое пугает пользователя, и мне нафиг не нужно.
Это не UI приложение, это системная служба, доступ к которой есть только у локального администратора. Такими сообщениями никого не испугаешь, не говори глупостей.
...
Рейтинг: 0 / 0
попрос по службам windows
    #38136091
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для информации - код 4-го фреймворка:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
	bool flag = NativeMethods.StartServiceCtrlDispatcher(intPtr);
	string text = "";
	if (!flag)
	{
		text = new Win32Exception().Message;
		string string3 = Res.GetString("CantStartFromCommandLine");
		if (Environment.UserInteractive)
		{
			string string4 = Res.GetString("CantStartFromCommandLineTitle");
			ServiceBase.LateBoundMessageBoxShow(string3, string4);
		}
		else
		{
			Console.WriteLine(string3);
		}
	}



Логичнее конечно exeption выбросить и пусть пользователь сам решает, как выводить диагностику,
но такова селява.
...
Рейтинг: 0 / 0
попрос по службам windows
    #38136239
Фотография _=ДОБРЫНЯ=_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМожно написать программу, которая работает и как служба, и как приложение, в зависимости от того, как она запущена.

Как такое сделать?
...
Рейтинг: 0 / 0
попрос по службам windows
    #38136307
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_=ДОБРЫНЯ=_Алексей КМожно написать программу, которая работает и как служба, и как приложение, в зависимости от того, как она запущена.

Как такое сделать?

Creating windows service using Topshelf
...
Рейтинг: 0 / 0
попрос по службам windows
    #38136621
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa Creating windows service using Topshelf

\src\Runtime\Windows\WindowsHostEnvironment.cs
IsRunningAsAService, GetParent - и есть определение способа запуска
...
Рейтинг: 0 / 0
8 сообщений из 33, страница 2 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / попрос по службам windows
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]