Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/56: Рейтинг темы: голосов - 56, средняя оценка - 5.00
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12

Запуск программы от системы?

06.06.2012, 21:37. Показов 12027. Ответов 50
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можно ли сделать так что бы программа запускалась не от пользователя Активного а от системы?
 Комментарий модератора 
Правила: один вопрос - одна тема.
Часть сообщения перемещена в новую тему:
Перевести программу на 64-битную основу


Добавлено через 8 минут

Не по теме:

Ну спасибо, а то вот тему опять создавать лень было:)

0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.06.2012, 21:37
Ответы с готовыми решениями:

Запуск программы от имени системы
Добрый вечер. Я не знаю, туда ли я обратился, но рискну задать интересующий вопрос. Мне нужно запустить программу .exe от имени системы....

Запуск программы при запуске системы
ННаписал напоминалку себе, которая при запуске сворачивается в трей и выскакивает после 20 минут со звуком и сообщением. так вот, надо мне,...

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

50
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
07.06.2012, 17:35
Студворк — интернет-сервис помощи студентам
Примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
AnsiString svc_name = "my_app_as_service", prog_path = Application->ExeName/*+ "\" \\arguments\""*/;
bool interact = true;
 
TStringList *file = new TSringList();
file->Add("choice \/N \/T 3 \/C 7 \/D 7 > NUL");
file->Add("sc create " + svc_name + " binpath= \"" + prog_path + "\" type= own");
if(interact) { file->Strings[1] += " type= interact"; }
file->Add("sc start " + svc_name);
file->Add("pause");
file->SaveToFile("my_batch.bat", TEncoding::ANSI);
delete file;
 
ShellExecute( NULL, "open", ( ExtractFilePath(Application->ExeName) + "my_batch.bat" ).c_str(), 
    NULL, NULL, SW_SHOWDEFAULT );
Application->Terminate();
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
07.06.2012, 19:34  [ТС]
Цитата Сообщение от BRcr Посмотреть сообщение
Примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
AnsiString svc_name = "my_app_as_service", prog_path = Application->ExeName/*+ "\" \\arguments\""*/;
bool interact = true;
 
TStringList *file = new TSringList();
file->Add("choice \/N \/T 3 \/C 7 \/D 7 > NUL");
file->Add("sc create " + svc_name + " binpath= \"" + prog_path + "\" type= own");
if(interact) { file->Strings[1] += " type= interact"; }
file->Add("sc start " + svc_name);
file->Add("pause");
file->SaveToFile("my_batch.bat", TEncoding::ANSI);
delete file;
 
ShellExecute( NULL, "open", ( ExtractFilePath(Application->ExeName) + "my_batch.bat" ).c_str(), 
    NULL, NULL, SW_SHOWDEFAULT );
Application->Terminate();
1-ое
TStringList *file = new TStringList ! ;
2-ое
В строке
C++
1
file->SaveToFile("my_batch.bat", TEncoding::ANSI);
2-е ошибки
Build
[C++ Error] Unit1.cpp(29): E2090 Qualifier 'TEncoding' is not a class or namespace name
[C++ Error] Unit1.cpp(29): E2121 Function call missing )
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
07.06.2012, 20:32
И чего? Я еще и отлаживать теперь должен? Я всего лишь указал путь, идти по нему уже не мне.
Почитай про TEncoding и по-другому попробуй. Или вообще кодировку не указывай.
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
08.06.2012, 08:15  [ТС]
Цитата Сообщение от BRcr Посмотреть сообщение
И чего? Я еще и отлаживать теперь должен? Я всего лишь указал путь, идти по нему уже не мне.
Почитай про TEncoding и по-другому попробуй. Или вообще кодировку не указывай.
Бррррррррр... я нихрена непонел.

Добавлено через 9 часов 57 минут
Всмысле здесть TEncoding
0
 Аватар для niceonehere
13 / 13 / 0
Регистрация: 14.04.2012
Сообщений: 158
02.07.2012, 00:35
лк и люди добрые подскажите чем сервис отличается от программы
скажем я могу запустить как сервис программу любую?почему?
если можно чуть подробней чем никак =) спасибо
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
02.07.2012, 06:08
Лучший ответ Сообщение было отмечено как решение

Решение

Службы Windows XP и управление ими
Помимо обычных приложений, запускаемых пользователем, существуют так же приложения, которые решают особые задачи, например: обеспечение общего доступа к файлам, обеспечение общего доступа к принтерам, составление списка компьютеров в папке «Сетевое окружение» и.т.п.

Основное отличие таких приложений от обычных пользовательских (таких как Photoshop, Visual Studio, MS Word и.т.п.) состоит в том, что не пользователь запускает их тогда, когда они ему необходимы, эти приложения должны работать всегда, когда компьютер включен.

Действительно, какое имеет значение, вошел ли локальный пользователь в систему, для предоставления папки компьютера в общий доступ? То приложение, которое отвечает за предоставление папок в общий доступ не должно зависеть от входа пользователя в систему, оно должно стартовать вместе с операционной системой. Или представьте себе антивирус, который нужно запускать после входа в систему. Вероятно, во многих случаях будет уже поздно.

Еще одно отличие приложений такого рода от обычных состоит в том, что обычные приложения обычно имеют графический (или текстовый) интерфейс с пользователем непосредственно на рабочем столе пользователя, а приложения, о которых идет речь, чаще всего, предлагают интерфейсы для взаимодействия по сети. Такие приложения в Windows 2000/XP называют службами.

Итак, основные отличия служб от обычных приложений:

1. Службы выполняют задачи, непосредственно, порой, не заметные для пользователя, несмотря на некоторую тавтологию, эти задачи можно назвать служебными.
2. Службы обычно стартуют при старте операционной системы, а не в тот момент, когда пользователь решит их запустить. Любую из служб можно настроить на автоматический запуск в процессе начальной загрузки системы. Информация о том, на каком именно этапе начальной загрузки происходит запуск той или иной службы, хранится в реестре.
3. Службы обычно не имеют непосредственного графического интерфейса к пользователю, чаще всего они ориентированы на работу с ними по сети. Службы могут работать без какого-либо взаимодействия с пользователем. Они продолжают функционирование вне зависимости от того, подключен ли к системе какой-либо пользователь или нет. Другими словами, службы могут начать работу еще до того, как к системе подключится пользователь, и продолжают работать после того, как пользователь отключится от системы.
4. Между службами можно установить взаимозависимости. При этом если служба А зависит от службы Б и если служба Б по каким-либо причинам не смогла начать работу, то служба А также не будет запущена.

Установить в системе новую службу может только пользователь, обладающий административными полномочиями.

Что же есть общего между обычными приложениями и службами:

1. И то и другое – в конечном счете, программы.
2. И службы и приложения можно устанавливать и удалять.
3. И службы и приложения запускаются от имени некоторого пользователя: приложения – от имени того пользователя, который их запустил, а службы специально настраиваются. Службы могут быть настроены на использование конкретной учетной записи и пароля. Благодаря этому они обладают ограниченным доступом к ресурсам системы. Система безопасности Windows XP/2000 контролирует взаимодействие служб и системы точно так же, как это происходит в отношении пользователей.
4. Работу служб, как и работу приложений можно прекратить.

Службы можно запускать и останавливать при помощи консоли Services (Службы), которая входит в состав консоли Computer Manegement (Управление компьютером), или при помощи команд net start и net stop.

Чтобы просмотреть список установленных служб, запустите консоль Computer Manegement (Управление компьютером) и щелкните на узле Services (Службы) консольного дерева.

В данном случае мы просматриваем не список служб, запущенных в данный момент, а именно список установленных на компьютере служб, как работающих в данный момент и не работающих.

Оснастка «Службы» позволяет управлять службами как таковыми, не привязываясь к специфике работы конкретной службы. Оснастка «Службы» позволяет управлять службами, как кнопка «Закрыть» завершает работу программы, а кнопка «минимизировать» сворачивает ее в панель задач – не привязываясь к тому, что делает та или иная программа ее всегда закрывают или минимизируют стандартным образом.

Данная оснастка не предназначена для инсталляции служб – для этого в ней нет никаких средств. Службы инсталлируются так же, как обычные приложения – запуском инсталляционного файла. Так же данная оснастка не предназначена для деинсталляции служб – снова таки, службы, как и приложения, деинсталлируются запуском соответствующей программы для деинсталляции. Обратите внимание, что если у вас установлена программа- антивирус, то в списке служб вы обязательно найдете соответствующую службу. А появилась эта служба в списке при установке программы. Теперь если вы деинсталлируете антивирус, то и запись службы тоже исчезнет. Таким образом, практически любое приложение можно установить как службу, это должно быть предусмотрено программой инсталлятором. Чуть позже мы узнаем, как установить программу, как службу даже если ее инсталлятор этого не предусматривает. Вы спросите, а что если установить программу и поместить ее ярлык в "Автозапуск", не будет ли это то же самое, что и служба? Опять же обращаю ваше внимание на то, что программы из автозапуска стартуют при входе пользователя, а службы при старте системы.

Чтобы определить свойства службы в консоли Services (Службы) выделите нужную службу правой кнопкой, а затем выберите пункт Properties (Свойства). Окно диалога свойств службы содержит четыре вкладки: General (Общие), Log On (Вход в систему), Recovery (Восстановление), Dependencies (Зависимости). Разберем эти вкладки последовательно.

- General (Общие). Позволяет запустить и остановить службу, а также определить будет ли служба запускаться по команде (Manual - Вручную), автоматически каждый раз при запуске системы (Automatic - Авто) или служба вообще не будет запускаться (Disable - Отключено).

У каждой службы есть имя и выводимое имя. Имя службы является внутренним именем, которым пользуется ОС, а выводимое имя предназначено для удобства пользователя. Когда мы работаем со службой в графической оснастке, то видим в списке выводимое имя службы, а когда будем работать со службами с помощью командной строки, то сможем обращаться к службе и по ее имени и по ее выводимому имени.

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

Рассмотрим выпадающее меню "Тип запуска".
Есть три варианта запуска службы:

1. Автоматически. Служба будет стартовать автоматически при старте операционной системы, не дожидаясь входа пользователя в систему. Так стартуют многие службы, например те, которые предоставляют ресурсы в сети для общего доступа.
2. Вручную. Служба не стартует автоматически при запуске ОС. Пользователь может самостоятельно запустить службу, воспользовавшись данной оснасткой или дать специальную команду в командной строке. При этом запустить службу сможет не только пользователь, но и другая служба или приложение, дав соответствующую команду.
3. Отключено. Служба не стартует автоматически при запуске ОС. Пользователь может запустить службу только после того, как с помощью данной оснастки переведет ее в один из двух предыдущих режимов, такая настройка НЕ позволит запустить службу другой службе или программе без вмешательства пользователя

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

Когда вы переходите на эту вкладку, утилита настройки служб обращается к реестру для того, чтобы получить информацию о взаимозависимости между различными службами, установленными в системе. Эта информация отображается в виде двух разделов.
В первом разделе отображается список служб, от которых зависит данная служба. Если одна из служб, перечисленных в данном списке, не будет запущена, служба, которую вы настраиваете, не сможет запуститься.
Во втором разделе отображается список служб, зависящих от данной службы. Если данная служба не будет работать, службы, перечисленные в данном списке, также не смогут работать. Сведения, содержащиеся в данных списках, чрезвычайно полезны в случае, если вы намерены осуществить останов или запуск службы.
Обратите внимание на то, что мы не конфигурируем с помощью оснастки «Службы» зависимости служб, мы просто получаем информацию об имеющихся зависимостях.

Веренемся на первую вкладку и рассмотрим собственно состояния служб:

1. Работает. Это обычное состояние службы, как ясно из названия, служба работает. Из этого состояния службу можно перевести в два других состояния – остановлена (кнопкой «Стоп») и приостановлена (кнопкой «Пауза»). Переход в режим работы осуществляется кнопкой Start (Пуск). Если служба обладает собственным исполняемым файлом, этот файл загружается в память и запускается. Если служба входит в состав некоторого исполняемого файла, в состав которого наряду с ней входят другие службы, начинает работу программный поток, который соответствует этой службе.
2. Остановлена. Нажав кнопку «Стоп» мы останавливаем службу, она перестает работать. При этом перед остановкой данной службы будут остановлены все зависимые от нее службы, о чем предупредят пользователя. Запустив затем службу, мы снова заставим ее работать, но при этом зависимые службы сами по себе не стартуют, их необходимо стартовать отдельно.
3. Приостановлена. Нажав кнопку «Пауза», мы приостановим службу, она перестанет работать, но зависимые службы не будут ни остановлены, ни приостановлены. И хотя, возможно, зависимые службы и не будут правильно работать, пока приостановлена та служба, от которой они зависят, но при нажатии кнопки «Продолжить» служба продолжает свою работу, как и все зависимые от нее службы. В отношении разных служб эта команда выполняется по-разному. Некоторые службы после выполнения этой команды перестают отвечать на запросы (что напоминает остановку работы службы), другие перестают выполнять только часть своих функций. Некоторые службы вообще не реагируют на команды Pause (Пауза) и Resume (Продолжить).

Постарайтесь не выполнять запуск и остановку служб без крайней необходимости. Дело в том, что в результате любой из этих процедур могут быть нарушены зависимости между службами, что может привести к непредсказуемым результатам. Можно протестировать эти операции, когда на машине не выполняются какие-либо важные действия. Я настоятельно не рекомендую пользоваться советами по оптимизации быстродействия системы, где предлагают выключить ненужные службы для освобождения оперативной памяти. Освободите вы при этом пару мегабайт максимум, а проблем можно создать огромное количество. Никто не может знать, какие службы нужны вашей системе, а какие нет в данный момент. Пример: пользователь отключает ненужную службу "DHCP client" и вроде как все хорошо, система стабильно работает уже несколько месяцев, и про эту горе оптимизацию пользователь уже давно забыл. В один прекрасный день он решает подключиться к сети Интернет, купил модем, установил драйвера, настроил соединение по инструкции от провайдера, но ничего не получилось. Дальше все может развиваться так: смена драйверов, замена модема, вызов специалиста и.т.д. Этого можно было избежать. Вывод следующий: если вы не знаете, какие функции выполняет данная служба, то не стоит изменять режим ее работы и запуска.

Перейдем на вкладку "Вход в систему".

Когда пользователь компьютера запускает приложение, оно запускается с привилегиями его учетной записи. Но службу запускает не пользователь компьютера, она обычно запускается еще до его входа в систему. Однако любое приложение в Windows должно быть запущено от имени некоторой учетной записи, и поэтому администратор может настроить ту или иную службу, от имени какой учетной записи она должна запускаться. Обычно все службы запускаются от имени специальной учетной записи «Система», однако иногда бывают ситуации, когда необходимо запустить службу от имени другой учетной записи. В любой момент любую службу можно аутентифицировать, даже если в данный момент к системе не подключен ни один пользователь. Чтобы выполнить то или иное действие, служба должна обладать необходимыми полномочиями. Полномочия службы не безграничны. Они соответствуют набору прав, которым обладает учетная запись, используемая службой для подключения к системе.

Настраивая параметры учетной записи, используемой той или иной службой, будьте внимательны. Если вы неправильно настроите эти параметры, служба не сможет выполнять свои функции. Настраивая учетную запись службы, придерживайтесь следующих правил:

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

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

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

Как правило, не рекомендуется использовать для аутентификации служб учетную запись LocalSystem (локальная система). Вместо этого следует создать набор специальных учетных записей, а затем настроить работающие в системе службы на использование этих учетных записей. Имена и пароли этих учетных записей следует держать в секрете.
В некоторых случаях может потребоваться использование учетной записи, отличной от LocalSystem. Такая ситуация может возникнуть в случае, если служба должна обмениваться данными с другими компьютерами через сеть. Дело в том, что учетная запись LocalSystem не может использоваться в сети. Ее можно использовать только на локальном компьютере.
При настройке учетных записей служб будьте внимательны! Не стоит предоставлять службам слишком широких полномочий по всей сети и в локальной системе, если, конечно, в этом нет насущной необходимости. Если же вы намерены наделить службу широким набором административных полномочий, внимательно изучите все связанные с этим риски.

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

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

Итак, при помощи этой вкладки вы можете настроить пользовательскую учетную запись и пароль, который будет использоваться при запуске службы.
Здесь же можно разрешить или запретить работу службы в том или ином профиле оборудования. Возможность разрешения/запрещения службы в разных профилях оборудования, как правило, используется для настройки систем Windows XP/2000 Professional.

Следующая вкладка Recovery (Восстановление).

Эта вкладка позволяет настроить реакцию системы в случае, если служба не может запуститься. Действия системы можно настроить на случай, если сбой службы произошел впервые, повторно или более чем в два раза. При возникновении сбоя система может ничего не делать, перезапустить службу, перезагрузить компьютер или выполнить программу, командная строка запуска которой настраивается здесь же, в разделе Выполнение программы. Если в случае сбоя компьютер будет перезагружен, можно приказать системе перед перезагрузкой переслать другим компьютерам сети некоторое сообщение. Настройка пересылаемого сообщения выполняется при помощи кнопки Restart options (Параметры перезагрузки компьютера).

Здесь нет никаких особых тонкостей, но следует отдавать себе отчет в том для каких служб, какие действия наиболее приемлемы. Например, глупо выставлять перезапуск ПК в случае сбоя службы отвечающей за автоматические обновления, особенно если на этот компьютер возложены какие-либо сетевые функции.

Теперь пример использования этой настройки: вирус MSBlast, используя некоторые уязвимости в Windows, приводит к отказу службы «Вызов удаленных процедур». В Windows 2000, при отказе этой службы ничего не предпринимается, а в Windows XP настройки по умолчанию требуют перезагрузки компьютера в случае выхода из строя этой службы. Соответственно, при вирусной атаке, компьютер под управлением Windows XP перезагружается, давая пользователю одну минуту «на размышления». Возникает проблема – скачать из Интернета обновление для системы, делающее ее неуязвимой для атак данного вируса не получается – компьютер перезагружается раньше, чем удается скачать необходимое обновление. Как один из вариантов решения проблемы, можно предложить следующее: перенастроить службу «Удаленный вызов процедур» таким образом, чтобы система не перезагружалась при отказе данной службы, а уже затем спокойно скачать обновление ОС, установить его, скачать антивирус, удаляющий вирус MSBlast с компьютера, запустить его, а уже затем перенастроить службу снова так, как она была настроена по – умолчанию.

Обратим внимание на службы lanmanserver (Сервер) и lanmanworkstation (Рабочая станция). Подчеркнуть, что служба Сервер отвечает за предоставление в общий доступ папок и принтеров нашего компьютера, ее остановка приведет к тому, что все общие ресурсы нашего компьютера станут недоступны для пользователей в сети. В результате остановки службы lanmanserver (Сервер) также будет остановлена служба Computer Browser (Обозреватель компьютеров), равно как и другие службы, зависящие от службы lanmanserver (Сервер). Как вы помните список взаимозависимостей служб отображается на вкладке Dependenсies (Зависимости) в окне диалога Properties (Свойства) службы. В результате остановки службы lanmanserver (Сервер) любые соединения между сервером (в данном случае сервером выступает ваша машина) и клиентами будут прерваны. Это может привести к потере данных и нарушению целостности файлов. Поэтому, прежде чем останавливать на компьютере службу lanmanserver (Сервер), следует предупредить пользователей о предстоящем останове. В этом случае они смогут завершить свою работу и корректно отключиться от сервера. Проще всего выполнить это при помощи оснастки "Службы" или "Общие папки".

За что же отвечает служба lanmanworkstation (Рабочая станция)? При доступе к чужим общим папкам, файловым менеджерам (проводник, FAR manager etc) нет необходимости реализовывать всю сетевую клиентскую часть, так как в Windows есть служба, организующая доступ к общим папкам для любого приложения – Рабочая станция. Остановка службы Рабочая станция делает невозможным доступ к чужим общим папкам на вашем компьютере.

Теперь рассмотрим управление службами из командной строки.

Для управления службами применяют команду net.exe с параметрами start, stop, pause, continue.

Чтобы отобразить список работающих служб в окне текстовой консоли, в командной строке наберите команду net start.

Чтобы запустить службу из командной строки, используйте команду net start.
Например, запустить службу telnet можно при помощи команды net start telnet.
Для остановки службы из командной строки следует использовать команду net stop.
Например, запустить службу telnet можно при помощи команды net stop telnet.
Если имя службы содержит пробелы, заключите его в кавычки. Например, net start «task scheduler».
Можно использовать русское наименование службы, однако при этом имя службы необходимо заключить в кавычки. К тому же при использовании русских названий служб не допускается заменять прописные буквы на строчные.
Например, net stop «Планировщик задач».

Все перечисленные правила справедливы для приостановки и продолжения работы службы.

Управление службами с помощью команд может пригодиться для создания пакетных файлов и для управления службами удаленного ПК. При использовании хороших каналов связи можно управлять службами другого ПК и через графический интерфейс. Для этого нужно в консоли управления добавить изолированную оснастку "Службы" и выбрать не локальный, а целевой компьютер.

Источник: Службы Windows XP и управление ими
3
 Аватар для niceonehere
13 / 13 / 0
Регистрация: 14.04.2012
Сообщений: 158
02.07.2012, 10:21
лк всё это полезно но по сути узнал только чтот локалсистем не работает на др компе
мне бы понять как написать сервис?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
02.07.2012, 17:58
niceonehere, это был конкретный ответ на конкретный вопрос "чем сервис отличается от программы", а не "как написать сервис".
0
 Аватар для niceonehere
13 / 13 / 0
Регистрация: 14.04.2012
Сообщений: 158
02.07.2012, 19:06
если бы он отличался только тем что описано то у меня бы уже работал =)
как будет угодно,тогда вопрос чисто по теме:
запустить программу от системы: лкшный код пробовал но что-то не получается
а собственноручно дописаться в реестр сервисов помогает
но моя прога к сожалению не работает как сервис со словами:служба не ответила на запрос своевременно
так надо отдельно делать сервис как-то по особенному или возможно запустить обычный экзешник как службу?

Не по теме:

лк, хватит бюрократии,пожалей еле живого простуженного человека =)

0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.07.2012, 19:29
А по-гуглить?

http://sources.ru/builder/syst... ices.shtml
1
 Аватар для niceonehere
13 / 13 / 0
Регистрация: 14.04.2012
Сообщений: 158
02.07.2012, 20:45
сори,я нашёл сперва какой-то крап,сразу отчаился
и потом моя температурная голова решила что если на форуме нету то создать тему святое дело
спасибо

Добавлено через 1 час 6 минут
прочитал,но там ничего не рассмотрено
от этой статьи вообще пользы 0 там ничего нету и ничего не говорится
может у кого есть пример сервиса готовый?выложите пожалуйста
и я так и не понял главный вопрос,он же чисто по теме:можно обычную прогу запустить сервисом?как и почему?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
02.07.2012, 21:03
Вот вам и показали, как сделать приложение-сервис.
Для внекласного чтения:
Управление системными службами Windows NT
Службы Windows изнутри

дубль два
1
 Аватар для niceonehere
13 / 13 / 0
Регистрация: 14.04.2012
Сообщений: 158
02.07.2012, 21:28
лк,спасибо пошёл читать
умоляю хватит линковать статью "дубль два" там ничего нету
больше почерпну создав пустой проект сервиса там хоть пара строк по делу
в этой ссылке ед место как-то связанное с сервисом
C++
1
void __fastcall TService1::Service1Execute(TService *Sender)
прожать дважды обработчик события я уже научился и сервис тут не при чём
остальное работа допустим с сокетами..зачем это линковать =(

спасибо ещё раз,буду молиться и проверять тему на примеры сервиса готового в котороом есть работа именно с сервисом(его запуском,настройками и работой,программным путём конечно)
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
02.07.2012, 21:31
niceonehere, повторение - мать учения, а вы просто не хотите понять, что изначально надо создавать приложение, как сервис.
Если вам запустить сторонне/готовое приложение, как сервис. то это уже другой вопрос, не относящийся к билдеру, а относящийся к операционной системе.
1
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
02.07.2012, 21:58
(его запуском,настройками и работой,программным путём конечно)
Ну это уже касается ОS, а не Builder-а.

Воообще неплохо бы знать как реализованы классы сервиса напрямую через WinApi.
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
02.07.2012, 22:10
Лучший ответ Сообщение было отмечено как решение

Решение

Пишем сервис. Что может быть проще!
Написание сервисов Windows NT на WinAPI
3
 Аватар для niceonehere
13 / 13 / 0
Регистрация: 14.04.2012
Сообщений: 158
05.07.2012, 01:26
раз уж я спросил надо написать что ещё помогло..
сервис
системные сервисы

сервис запускает прогу
она запущена от системы всё круто но
почему у проги исчезают видимые окна и часть функций не работает?что с этим делать?
спс

Не скромничайте,поделитесь ответом!
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
29.07.2012, 12:35  [ТС]
BRcr, Я решил расмотреть ваше предложение и столкнулся с проблемой:
Я создал новый проект и на кнопку кинул код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
AnsiString svc_name = "my_app_as_service", prog_path = Application->ExeName/*+ "\" \\arguments\""*/;
bool interact = true;
 
TStringList *file = new TStringList();
file->Add("choice \/N \/T 3 \/C 7 \/D 7 > NULL");
file->Add("sc create " + svc_name + " binpath= \"" + prog_path + "\" type= own");
if(interact) { file->Strings[1] += " type= interact"; }
file->Add("sc start " + svc_name);
file->Add("pause");
file->SaveToFile("my_batch.bat", TEncoding::ANSI);
delete file;
 
ShellExecute( NULL, L"open", ( ExtractFilePath(Application->ExeName) + L"my_batch.bat" ).c_str(),
    NULL, NULL, SW_SHOWDEFAULT );
Application->Terminate();
В итоге в консоле вот такая чуш

И как это исправить?
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
29.07.2012, 12:37  [ТС]
И ещё вопрос как мне потом убить этот сервис?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
29.07.2012, 22:50
Отказано в доступе - недостаточно прав. Запускай свою программу от администратора ручками, манифестом или повышай привилегии через COM во время выполнения.
А то, что крякозябры в консоли, так это либо не окажет никакого влияния, либо надо будет кодировочку подогнать.
Цитата Сообщение от ivan.-94 Посмотреть сообщение
И ещё вопрос как мне потом убить этот сервис?
Code
1
2
sc stop my_app_as_service
sc delete my_app_as_service
А вообще - открой консоль, напиши sc /? и будет тебе счастье.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.07.2012, 22:50
Помогаю со студенческими работами здесь

Запуск программы при старте системы не работает
Всем привет! Стоит операционная система (uname -a): Linux host 4.15.0-47-generic #50-Ubuntu SMP Wed Mar 13 10:44:52 UTC 2019 x86_64...

Автоматический запуск программы при загрузке системы
Здравствуйте. Используется ОС linux yocto-clanton 4.7.2. Поставленная цель: Необходимо, чтобы при загрузке системы...

Запуск определённой версии программы в зависимости от разрядности системы при клике на изображении
Люди добрые помогите с скриптом)) Нужен скрипт чтобы при нажатии на картинку или кнопку в html(hta) запускалась msconfig.exe в x32 и x64...

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

Запуск студией и запуск самой виндой. Разница работы программы
Итак, проблема такова: есть проект, который замечательно работает при нажатии F5 в студии. При компиляции в релиз-режиме и запуске...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru