Чтобы добавить мои 2 цента, исключение может возникнуть, даже если вы вызываете свой код через System.Windows.Threading.Dispatcher.CurrentDispatcher.Invoke()
. Дело в том, что вам нужно вызвать Invoke()
элемента Dispatcher
элемента управления, к которому вы пытаетесь получить доступ, что в некоторых случаях может не совпадать с System.Windows.Threading.Dispatcher.CurrentDispatcher
. Поэтому вместо этого вы должны использовать YourControl.Dispatcher.Invoke()
для обеспечения безопасности. Я уже несколько часов стучал головой, прежде чем понял это.
Вы могли установить свой сервис exe для поддержки сам регистрация / нерегистрация с помощью параметров командной строки (-i-u и т.д.) вместо того, чтобы писать пакетный файл, чтобы сделать то же самое.
информация о создании Сам Installing Services В.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
Это - пакетные файлы, которые я раньше устанавливал.
@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
я не уверен, почему Вам был бы нужен пакетный файл для одного лайнера. это - то, что я использовал бы.
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe/i ServiceAssembly.dll
Предложения:
можно перенаправить эхо для добавления в файл:
повторяют сообщение>> logfile.txt
Отслеживание всего и convering, все пограничные случаи могут быть сложными в cmd.exe, это не богатая среда.
создайте файл с .bat расширением и поместите это в файл
installutil-u c:\YourServiceLocation\Service.exe
Я сделал это со старомодным пакетным файлом....
Копия 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
<час>