Почему.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 будет исправлена ​​в будущем?

0 ответов

Другие вопросы по тегам