Назад | Перейти на главную страницу

Windows: Создание службы из автономного приложения (VirtualBox). Сценарий остановки / выключения?

Моему клиенту нужен виртуализированный Linux, работающий на его Windows Server 2008 (R1). Мне удалось настроить VirtualBox как службу с srvany, но я не вижу способа создать своего рода «сценарий остановки», чтобы виртуальная машина корректно выключалась, когда я останавливаю зарегистрированную службу.

Я знаю, что могут быть другие варианты создания виртуальной машины без головы, но дело не в этом. Как я могу создать «сценарий остановки», который запускается, когда я останавливаю зарегистрированную службу (или перезагружаю систему)?

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


(для тех, кому может быть интересно)

Как я создал сервис VirtualBox

  1. Настроить виртуальную машину
  2. Установите «Windows Server 2003 Resource Kit Tools.exe».
  3. Скопируйте папку ".VirtualBox" в 'C: \ Windows \ System32 \ config \ systemprofile \', чтобы пользователь 'system' (который запускает службы) имел там свои машины VirtualBox.
    ВНИМАНИЕ: вам нужно будет исправить пути VirtualBox.xml к снимкам, если они есть на вашей виртуальной машине.
  4. Создайте пустой сервис под названием «UbuntuD» с помощью srvany:
    sc create UbuntuD binPath= "C:\Program Files (x86)\Windows Resource Kits\Tools\srvany.exe" start= auto DisplayName= "Ubuntu Daemon"
  5. Укажите команду запуска службы. Добавьте эти ключи в реестр
    [HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Services\UbuntuD\Parameters]
    Application="C:\Program Files\Sun\VirtualBox\VBoxHeadless.exe"
    AppParameters="--vrdp=off -s Ubuntu"
    AppDirectory="C:\Program Files\Sun\VirtualBox\"
  6. Для нашей хакерской службы нет «сценария остановки», поэтому мы добавляем сценарий выключения в «Локальная политика» -> Конфигурация компьютера -> Параметры Windows -> Сценарии (запуск / выключение):
    C:\Program Files\Sun\VirtualBox\vboxmanage, параметры: controlvm Ubuntu savestate
  7. Запустить сервис

«Настоящие» сервисные программы имеют код для выполнения операций по очистке и остановке. Вы запускаете программу, которая не предназначена для запуска в качестве службы, и у нее нет такого кода для обработки постепенного завершения, когда диспетчер управления службами (SCM) сигнализирует о том, что служба останавливается.

Кто-нибудь мог бы написать хорошую служебную оболочку для VirtualBox, которая могла бы изящно обрабатывать работу как службу. Это настоящее решение. К сожалению, вы не собираетесь придумать «хак», который сделает то, что вы ищете. SRVANY (и любая другая программа того же типа, о которой я знаю) не имеет возможности выполнять указанный пользователем код, когда SCM сигнализирует о том, что служба останавливается.

http://answers.yahoo.com/question/index?qid=20071011212557AAofTy6

Создайте файл VBS (т.е. сценарий VB). Откройте Блокнот и введите в него следующий код:

'=====================================
Set WshShell = WScript.CreateObject("WScript.Shell")
obj = WshShell.Run("H:\test.bat", 0)
set WshShell = Nothing
'=====================================

Замените «H: \ test.bat» в приведенном выше коде на полный путь к вашему собственному BAT-файлу, но не забудьте двойные кавычки вокруг полного пути к BAT-файлу.

СОХРАНИТЕ файл. Дайте ему имя, например HIDECMDWINDOW.VBS. Расширение должно быть VBS.

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

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

Благодарность за вышесказанное принадлежит Кушику Бисвасу как оригинальному плакату.

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