如何在C#中安装Windows服务(通过installutil)?

时间:2017-07-13 09:03:38

标签: c# .net windows process command

我的代码:

Process kurulum1 = new Process();
kurulum1.StartInfo.FileName = @"C:\ProgramData\Microsoft\Windows\StartMenu\Programs\Visual Studio 2017\Visual Studio Tools\Developer Command Prompt for VS 2017.lnk";

 kurulum1.StartInfo.Arguments = "cd C:\\Users\\stajyer3\\Documents\\Visual Studio 2017\\Projects\\TestWindowsService\\TestWindowsService\\bin\\Debug InstallUtil.exe "TestWindowService.exe"  ";

kurulum1.Start();

kurulum1.WaitForExit();

不工作

  

错误:

     

[错误:parse_cmd.bat]命令行参数无效:' cd'。争论   将被忽略。 [错误:parse_cmd.bat]无效的命令行参数:   ' C:\用户\ stajyer3 \文件\视觉&#39 ;.参数将被忽略。   [错误:parse_cmd.bat]命令行参数无效:' Studio'。   参数将被忽略。 [错误:parse_cmd.bat]命令行无效   参数:   ' 2017 \项目\ TestWindowsService \ TestWindowsService \ BIN \调试&#39 ;.   参数将被忽略。

           

** Visual Studio 2017开发人员命令提示符v15.0.26430.14   **版权所有(c)2017 Microsoft Corporation   ************************************************** ******************** [错误:VsDevCmd.bat] * VsDevCmd.bat遇到错误。环境   可能不完整和/或不正确。 *

3 个答案:

答案 0 :(得分:3)

你在这里犯了很多错误,不知道你的目标很难说哪个是最差的

  1. ProcessStartInfo.FileName应该是您要执行的文件 不是开始菜单快捷方式

  2. ProcessStartInfo.Arguments是命令行参数而不是a 命令

  3. 您正在使用的命令似乎是尝试更改 工作目录这应该完成 ProcessStartInfo.WorkingDirectory

  4. 您正在使用的字符串因为您正在退出而被破坏 字符串使用"但是你随身携带,所以我必须 假设你的意思是"在你需要的情况下在字符串里面 用\来区分它们然后看起来像"he said \"delimit your strings\" ",如果你使用@符号那么 分隔符变为""不是\"

  5. 参数是空格分隔的字符串,因此如果您的参数包含 诸如长格式文件名之类的空格然后你需要包围它们 引用"所以ProcessStartInfo.Arguments = "a b c:\\temp";将通过args" a"," b"和" c:\ temp"执行程序,但ProcessStartInfo.Arguments = "a literal string arg";将每个单词作为单独的参数ProcessStartInfo.Arguments = "\"a literal string arg\"";传递,这将传递一个arg与整个字符串

答案 1 :(得分:0)

您需要将路径括在引号中(并转义文件名周围的引号)

kurulum1.StartInfo.Arguments = "cd \"C:\\Users\\stajyer3\\Documents\\Visual Studio 2017\\Projects\\TestWindowsService\\TestWindowsService\\bin\\Debug InstallUtil.exe\" \"TestWindowService.exe\"  ";

答案 2 :(得分:0)

给它一个旋转:

var kurulum1 = new Process
{
    StartInfo =
    {
        FileName = @"C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil.exe",
        WorkingDirectory =
            "C:\\Users\\stajyer3\\Documents\\Visual Studio 2017\\Projects\\TestWindowsService\\TestWindowsService\\bin\\Debug",
        Arguments = "TestWindowService.exe"
    }
};
kurulum1.Start();
kurulum1.WaitForExit();

无需涉及Developer Command Prompt - 您可以直接调用installutil