【问题标题】:How to install a Windows service (via installutil) in C#?如何在 C# 中安装 Windows 服务(通过 installutil)?
【发布时间】:2017-12-17 23:13:15
【问题描述】:

我的代码:

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();

不工作

错误:

[ERROR:parse_cmd.bat] 无效的命令行参数:'cd'。争论 将被忽略。 [错误:parse_cmd.bat] 无效的命令行参数: 'C:\Users\stajyer3\Documents\Visual'。参数将被忽略。 [错误:parse_cmd.bat] 命令行参数无效:“Studio”。 参数将被忽略。 [错误:parse_cmd.bat] 无效的命令行 争论: '2017\Projects\TestWindowsService\TestWindowsService\bin\Debug'。 参数将被忽略。


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

【问题讨论】:

  • 能否格式化您的代码?
  • 我已经为您重新格式化了您的帖子。请考虑将来自己这样做,以使其更具可读性。预览是有原因的。
  • @MaviLe 告诉我们您希望代码做什么,您是否尝试运行命令提示符,启动“Debug InstallUtil.exe”运行“TestWindowService.exe”我们无法为您修复代码除非我们知道你想让代码做什么
  • @MikeT 我想在c#中安装名为TestWindowService.exe的windows服务

标签: c# .net windows process command


【解决方案1】:

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

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

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

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

  4. 您正在使用的字符串已损坏,因为您正在退出 使用 " 字符串,然后你继续使用字符串,所以我必须 假设您的意思是 " 在字符串中,在这种情况下您需要 用 \ 分隔它们,这看起来像 "he said \"delimit your strings\" "虽然如果你使用 @ 表示法,那么 分隔符变为“”而不是“”

  5. 参数是空格分隔的字符串,所以如果你的参数包含 诸如长格式文件名之类的空格,那么您需要将它们包围 带引号 " 所以ProcessStartInfo.Arguments = "a b c:\\temp"; 会将参数 "a"、"b" 和 "c:\temp" 传递给正在执行的程序,但 ProcessStartInfo.Arguments = "a literal string arg"; 会将每个单词作为单独的参数 ProcessStartInfo.Arguments = "\"a literal string arg\""; 传递,这将传入一个带有整个字符串的单个 arg

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 你是完全正确的,不知道为什么投反对票,除了这个,他们还犯了其他错误,但你已经涵盖了 OP 发布的错误
    • 'C:\Program' 不是内部或外部命令、可运行程序或批处理文件。 C:\Windows\system32>
    • @MaviLe 那是你的文件名而不是参数
    • 我该如何解决?
    • @MaviLe 阅读了有关 mjwills 要求您澄清您想要发生的事情的问题的 cmets,以便我们可以帮助您
    【解决方案3】:

    试一试:

    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

    【讨论】:

    • 事务没有发生,我看不到错误
    • 您的代码运行情况如何?它是命令行应用程序吗?一个网络应用程序?还有什么?您能否将您的课程复制并粘贴到 dotnetfiddle.netShare 链接中,以便我检查您的代码并确保没有拼写错误?
    • 我是 stackoverflow 的新手。
    • 我想看看一个名为TestWindowsService的windows服务安装程序是否在c#表单应用程序的服务中运行
    • 我看不到 installutil.exe 正在运行和关闭
    猜你喜欢
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 2015-05-28
    • 2010-09-07
    • 2014-03-18
    • 2011-07-15
    相关资源
    最近更新 更多