Вот как я заставил его работать:
(это решение было частью корпоративного программного обеспечения, где некоторые DLL-файлы повторно используются другим приложением)
Модель - это проект, на который есть ссылка в сервисном проекте, и он создается перед сервисным. Вот почему мы пишем эти коды в событиях перед сборкой модели:
Событие предварительной сборки модели:
if not exist "$(SolutionDir)UI\bin\Debug\ServiceFolder" mkdir "$(SolutionDir)UI\bin\Debug\ServiceFolder"
net start | find "[Service Name]"
if ERRORLEVEL 0 (
net stop "Service Name"
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe" -u "$(SolutionDir)UI\bin\Debug\ServiceFolder\Service.exe"
)
exit 0
- создает каталог в выходной папке
- находит сервис по имени
- останавливает это
- удаляет его
- выход 0 приводит к продолжению процесса сборки, если здесь происходит ошибка
Событие обслуживания после сборки:
xcopy /E /Y "$(ProjectDir)bin\Debug\*" "$(SolutionDir)UI\bin\Debug\ServiceFolder"
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe" "$(SolutionDir)UI\bin\Debug\ServiceFolder\Service.exe"
net start "Service Name"
- скопировать все необходимое для службы в другую папку
- устанавливает сервис
- запускает службу
О разрешениях?
- visual studio автоматически запросит повышенное разрешение