Пакет Script для установки или удаления службы .NET Windows
У меня нет опыта написания пакетных скриптов, но мне было интересно, есть ли способ установить службу .NET Windows с помощью installutil.exe
с помощью такого script или удалить службу, если она уже установлена, в идеале с какое-то подтверждение, что я действительно хотел бы выполнить удаление (например, нажмите y для удаления).
Вот несколько деталей:
- .exe для службы находится в каталоге
C:\Program Files\Data Service
- script должен находиться в том же каталоге, что и .exe для службы
- Было бы неплохо добавить простую строку в файл журнала (мы будем называть ее
program.log
, также в этом каталоге) после того, как служба была установлена
- На компьютере работает Windows Server 2003 с установленной платформой .NET Framework в каталоге по умолчанию
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
Если вы чувствуете, что это может быть сделано лучше, было бы неплохо услышать другие предложения. Я всегда мог написать программу установки, но это не приоритет.
Ответы
Ответ 1
Вы можете настроить службу exe для поддержки самостоятельной регистрации/отмены регистрации с помощью аргументов командной строки (-i -u и т.д.) вместо того, чтобы писать пакетный файл, чтобы сделать то же самое.
Информация о создании самостоятельной установки служб в .NET
http://anotherlab.rajapet.net/2006/06/self-installing-services-in-net.html
http://www.gotnet.biz/WindowsServiceSelfInstaller.ashx
Также добавление проекта установки в ваше решение и создание пакета установки Visual Studio может быть быстрее.
Как создать проект установки для службы Windows в Visual Basic.NET или на Visual Basic 2005
(VB) http://support.microsoft.com/kb/317421
(С#) http://support.microsoft.com/kb/816169
Ответ 2
Это пакетные файлы, которые я использовал для установки.
@ECHO OFF
REM The following directory is for .NET 2.0
set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v2.0.50727
set PATH=%PATH%;%DOTNETFX2%
echo Installing MyService...
echo ---------------------------------------------------
InstallUtil /i MyService.exe
echo ---------------------------------------------------
echo Done.
pause
Чтобы удалить, я использовал следующее:
@ECHO OFF
REM The following directory is for .NET 2.0
set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v2.0.50727
set PATH=%PATH%;%DOTNETFX2%
echo Uninstalling MyService...
echo ---------------------------------------------------
InstallUtil /u MyService.exe
echo ---------------------------------------------------
echo Done
Ответ 3
Проще просто сделать услуги для самостоятельной установки. После того, как вы это реализуете, вы можете либо запустить службу exe напрямую с помощью (/i или /u switch), либо обернуть вызов в пакетном файле, если хотите.
static void Main(string[] args)
{
if (args.Length > 0)
{
//Install service
if (args[0].Trim().ToLower() == "/i")
{ System.Configuration.Install.ManagedInstallerClass.InstallHelper(new string[] { "/i", Assembly.GetExecutingAssembly().Location }); }
//Uninstall service
else if (args[0].Trim().ToLower() == "/u")
{ System.Configuration.Install.ManagedInstallerClass.InstallHelper(new string[] { "/u", Assembly.GetExecutingAssembly().Location }); }
}
else
{
System.ServiceProcess.ServiceBase[] ServicesToRun;
ServicesToRun = new System.ServiceProcess.ServiceBase[] { new MyService() };
System.ServiceProcess.ServiceBase.Run(ServicesToRun);
}
}
Ответ 4
Это тот, который я использую. Я нашел его и использовал. Thanx создателю..
@echo off
SET PROG="YourServiceHere.exe"
SET FIRSTPART=%WINDIR%"\Microsoft.NET\Framework\v"
SET SECONDPART="\InstallUtil.exe"
SET DOTNETVER=2.0.50727
IF EXIST %FIRSTPART%%DOTNETVER%%SECONDPART% GOTO install
SET DOTNETVER=1.1.4322
IF EXIST %FIRSTPART%%DOTNETVER%%SECONDPART% GOTO install
SET DOTNETVER=1.0.3705
IF EXIST %FIRSTPART%%DOTNETVER%%SECONDPART% GOTO install
GOTO fail
:install
ECHO Found .NET Framework version %DOTNETVER%
ECHO Installing service %PROG%
%FIRSTPART%%DOTNETVER%%SECONDPART% %PROG%
GOTO end
:fail
echo FAILURE -- Could not find .NET Framework install
:param_error
echo USAGE: installNETservie.bat [install type (I or U)] [application (.exe)]
:end
ECHO DONE!!!
Pause
Ответ 5
Я обнаружил, что всегда лучше использовать хороший проект установки, чтобы использовать пакетные файлы для установки приложения. Бывают моменты, когда это невозможно. Несколько проектов на работе были написаны во времена Windows NT и ранней Windows XP и использовали простые пакетные файлы для установки. В те времена конвертирование командного файла в установленную упаковку - это больше проблем, чем простая настройка. Благодаря большому поиску я обнаружил, что http://ss64.com/nt/ - очень хорошая ссылка на пакетный файл Windows. (Это просто странно, со всем нашим продвижением в программных технологах, чтобы написать это последнее предложение.)
В любом случае, Happy Coding! - независимо от "языка".
Ответ 6
Я не уверен, зачем вам нужен пакетный файл для одного лайнера. это то, что я бы использовал.
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe/i ServiceAssembly.dll
Ответ 7
Предложения:
- Использовать среду, Windows не может быть установлена на C:. Но вы можете использовать% WinDir%.
-
Вы можете перенаправить эхо для добавления в файл:
echo Сообщение → logfile.txt
-
Отслеживание всего и преобразование всех случаев краев может быть сложным в cmd.exe, это не богатая среда.
- Не существует постоянного места для документации. Но помощь (из командной строки) на "cmd", "if", "for", "set" и "call" покрывает большую часть синтаксиса avaialble.
- Установите эхо в начале, чтобы увидеть команды по мере их выполнения.
Ответ 8
Я сделал это со старомодным пакетным файлом....
Скопируйте файл installutil.exe в тот же каталог, что и ваш исполняемый файл (чтобы упростить задачу). Ниже приведен общий пример содержимого требуемого пакетного файла: (у меня были только имена instal.bat)
installutil MyService.exe
sc config MyService type= interact type= own
sc failure MyService reset= 6000 actions= restart/5000/restart/5000/restart/5000
sc start MyService
Подробнее о параметрах командной строки для installutil.exe, см. здесь.
Чтобы удалить службу, используйте другой пакетный файл со следующим содержимым:
installutil MyService.exe /u
Ответ 9
создайте файл с расширением .bat и поместите его в файл
installutil -u c:\YourServiceLocation\Service.exe
Ответ 10
@echo off
SET PROG="c:\YourServiceLocation\Service.exe" SET FIRSTPART=%WINDIR%"\Microsoft.NET\Framework\v" SET SECONDPART="\InstallUtil.exe" SET DOTNETVER=4.0.30319 IF EXIST %FIRSTPART%%DOTNETVER%%SECONDPART% GOTO install
GOTO fail :install ECHO Found .NET Framework version %DOTNETVER% ECHO Installing service %PROG% %FIRSTPART%%DOTNETVER%%SECONDPART% %PROG% GOTO end :fail echo FAILURE -- Could not find .NET Framework install :param_error echo USAGE: installNETservie.bat [install type (I or U)] [application (.exe)] :end ECHO DONE!!! Pause
запустите этот файл bat как администратор