2012-10-03 294 views
44

只是试图通过运行下面的应用程序:如何解决“'installutil'不被识别为内部或外部命令,可操作程序或批处理文件。”?

enter image description here

我能浏览到该目录,在它的应用WindowsService1.exe,然后试图命令Installutil WindowsService1.exe但得到了以下错误......

enter image description here

由于VS只安装了一两天,我担心安装时可能会出现问题,因为它应该识别installutil。

是否可以执行一些基本诊断来确保VS命令提示符找到它应该执行的所有程序?

编辑

如果我在命令提示符下我看到下面的运行PATH

enter image description here

+2

你尝试过以管理员身份运行吗? – Agent007

+0

您可以尝试从“添加或删除程序”窗口进行修复。 – Erwin

+0

如果你从VS命令提示符输入'PATH',你应该看到一大堆路径变量(在我的机器上,我看到大约20行)。如果这个列表很小,那么安装可能有问题。如果installutil位于机器上但未找到,则是路径变量问题。如果完全缺失,那是一个不同的问题。 –

回答

107

这有点偏离主题,但我停止使用InstallUtil来安装我的服务。将它添加到服务本身很容易。添加对System.Configuration.Install的引用(如果我没有记错,在客户端配置文件版本中不可用),然后像这样更新Program.cs中的Main() - 函数。

static void Main(string[] args) 
{ 
    if (Environment.UserInteractive) 
    { 
     string parameter = string.Concat(args); 
     switch (parameter) 
     { 
      case "--install": 
      ManagedInstallerClass.InstallHelper(new[] { Assembly.GetExecutingAssembly().Location }); 
      break; 
      case "--uninstall": 
      ManagedInstallerClass.InstallHelper(new[] { "/u", Assembly.GetExecutingAssembly().Location }); 
      break; 
     } 
    } 
    else 
    { 
     ServiceBase[] servicesToRun = new ServiceBase[] 
          { 
           new Service1() 
          }; 
     ServiceBase.Run(servicesToRun); 
    } 
} 

然后,你可以调用WindowsService1.exe--install参数,它将安装服务,你可以忘掉InstallUtil.exe

+8

为安装失败捕获InvalidOperationException,并在卸载失败时安装异常[安全性和已安装(未安装)]。 – jdknight

+0

好多了,虽然我没有得到用户交互部分。这在我调试时总是如此,所以我的服务永远不会启动。 – KingOfHypocrites

+8

当直接启动可执行文件时,'Environment.UserInteractive'为true,即不通过servicemanager,而是通过命令行或Visual Studio。您可以添加一个'System.Diagnostics.Debugger.IsAttached'的检查,以便在Visual Studio中进行调试时跳过该部分。 –

2

除非你已经修改了你的路径,下面的应该是开发商命令提示符下使用而不是cmd:

  • msbuild
  • MSTEST(用于最终)
  • CSC
  • ILASM

...等

如果这些不可用,你可能有一个损坏的安装。

+1

+1 David - 我如何测试其中一个以查看事情是否正常工作? – whytheq

25

InstallUtil.exe通常位于C:\ Windows \ Microsoft.NET \ Framework下列出的其中一个版本下。

在我的情况下,它是在v4.0.30319。

你可以只检查您的路径:

回声%PATH%

应该给你的目录列表搜索可执行文件。

+0

VisualStudio命令提示符有一个installutil命令。 http://msdn.microsoft.com/en-us/library/sd8zc8ha.aspx – margabit

+5

VS中的命令提示符基本上是一个具有不同PATH的cmd。 – Daniel

+0

是的 - 我有'InstallUtil.exe'在与你同样的位置Daniel ie'C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319',正如你从我添加到OP的截图中可以看到的不是命令提示符的默认路径...你有什么建议来解决这个问题? – whytheq

22

这是我做了什么,以使它消失:

  1. 发现其中installutil驻留在我的电脑上。在我的情况下,它是C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319

  2. 打开命令提示符作为管理员,改变当前目录上面: “CD C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319'

  3. 然后进入: 'installutil C:\ MyProgramName.exe'

有趣的是,之前向上述溶液中我尝试不同的选项,其中加入C:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319添加到系统路径变量,但仍无法找到它。

祝您顺利安装。

+0

+1感谢您的额外信息 – whytheq

+2

这是更好,更实际的答案。谢谢。 –

+0

这个答案是最适用于OP的问题和更实用的解决方案的一堆,恕我直言。无论如何,它完美地满足了我的要求(这反映了我的要求)。 – nocarrier

0

发生这种情况可能是因为您没有以管理员或管理权限打开命令提示符。

+1

谢谢..... Agent007在2012年10月3日发表了此评论! – whytheq

2

上找到bytes.com

代码的解决方案安装一个服务:

@ECHO Installing Service... 
@SET PATH=%PATH%;C:\Windows\Microsoft.NET\Framework\v4.0.30319\ 
@InstallUtil C:\Unlock_4_Service\bin\Debug\Unlock_4_Service.exe 
@ECHO Install Done. 
@pause 

@InstallUtil您的Windows服务的< .exe文件路径>

代码卸载服务

@ECHO Installing Service... 
@SET PATH=%PATH%;C:\Windows\Microsoft.NET\Framework\v4.0.30319\ 
@InstallUtil /u C:\Unlock_4_Service\bin\Debug\Unlock_4_Service.exe 
@ECHO Uninstall Done. 
@pause 

@InstallUtil/u您的Windows服务的210 .exe文件路径>

保存2个文件作为service_install.bat和service_uninstall.bat

运行这些文件以管理员身份,每次你需要安装或卸载该服务的时间。在管理模式,即 enter image description here

0

打开Visual Studio命令提示符下,右键点击VS命令提示符,然后以管理员身份运行

0

我得到这个我从2017年去了之后回到2015年,我还在使用2017年的命令提示。要检查的东西。

相关问题