Почему.NET добавляет дополнительные цитаты для сервиса ImagePath при установке сервиса
Я столкнулся с очень странным поведением.NET, когда он устанавливает системный сервис.
Я добавил 2 вызова для входа в метод OnBeforeInstall. Вот что он показывает только когда был введен метод:
+ PreparingInstallation: 4 items in Parameters:
* #0/name = TcpGw_7050
* #1/assemblypath = D:\sandbox\x.NET\bin\Debug\TcpGwSrvc.exe
* #2/logfile = C:\Users\Dmitry\AppData\Local\Temp\install-TcpGw_7050.log
* #3/logtoconsole =
Вот что он показывает в конце метода OnBeforeInstall:
+ ReadyToInstall: 4 items in Parameters:
* #0/name = TcpGw_7050
* #1/assemblypath = "D:\sandbox\x.NET\bin\Debug\TcpGwSrvc.exe" TcpGw_7050
* #2/logfile = C:\Users\Dmitry\AppData\Local\Temp\install-TcpGw_7050.log
* #3/logtoconsole =
Но вот что действительно было установлено для свойства ImagePath этого сервиса:
""D:\sandbox\x.NET\bin\Debug\TcpGwSrvc.exe" TcpGw_7050"
Итак, по неизвестным причинам это была заключенная целая строка в дополнительные двойные кавычки! Но почему? И как это исправить?
Я уже пытался заключить параметр в двойные кавычки:
* #1/assemblypath = "D:\sandbox\x.NET\bin\Debug\TcpGwSrvc.exe" "TcpGw_7050"
Это не помогло.
Я пытался ничего не заключать в двойные кавычки:
* #1/assemblypath = D:\sandbox\x.NET\bin\Debug\TcpGwSrvc.exe TcpGw_7050
Это также не помогло.
Почему это важно: потому что когда ImagePath содержит такие дополнительные двойные кавычки, я не могу запустить службу из-за ошибки:
System error 87 has occurred.
The parameter is incorrect.
Я пытался решить эту проблему, но не нашел никаких объяснений этому.
Также своего рода риторический вопрос - почему в дизайне.NET Framework существует такой концептуальный пробел, что он не позволяет указывать сервис StartParameters каким-то стандартным способом? Таким образом, программисты должны использовать этот трюк с параметром AssemblyPath в Context.
Заранее спасибо.
PS. Это сервисное приложение.NET 3.5. Добавление сервиса StartParameter - то, что я делаю в коде. Вопрос не в добавлении самого StartParameter. Вопрос в том, почему.NET Framework добавляет дополнительные двойные кавычки? И как этого избежать?
PPS. Да, я знаю, что могу написать фрагмент кода, который откроет раздел реестра и изменит значение ImagePath, но я бы хотел избежать использования таких грязных методов, если это возможно, я хотел бы делать все со стандартными и простыми функциями.NET ServiceInstaller. Это вообще возможно?
Обходной путь : я реализовал трюк - добавил одну кавычку после AssemblyPath и одну кавычку перед параметром, так что теперь в конце метода OnBeforeInstall в выводе журнала я вижу следующее:
* #1/assemblypath = D:\sandbox\x.NET\bin\Debug\TcpGwSrvc.exe" "TcpGw_7050
С мыслью, что после того, как.NET добавит кавычки вокруг такого значения ImagePath, оно станет правильным значением exe + параметров. Как я вижу, этот обходной путь работает нормально. Но я сомневаюсь - что если эта ошибка с дополнительными кавычками в.NET будет исправлена в будущем?