2012-10-03 508 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年的命令提示。要檢查的東西。

相關問題