質問

次のように、Power-ShellからWindowsサービスをインストールしようとしています。

$sn = """" + $serviceName + " " + $exeName + """"
C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe -i /ServiceName=[$sn]  $exeFilePath

私は次の例外を取得しています。

Microsoft (R) .NET Framework Installation utility Version 2.0.50727.3053
Copyright (c) Microsoft Corporation.  All rights reserved.

Exception occurred while initializing the installation:
System.IO.FileNotFoundException: Could not load file or assembly 'file:///E:\Scheduled' or one of its dependencies. The system cannot f
ind the file specified..

しかし、次のコマンドは機能します。

C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe -i /ServiceName=["Scheduled Download Service"]  $exeFilePath

ダイナミックな名前でWindowsサービスをインストールしようとしていますが、Power-Shellを使用してサービス名を渡します。どんな助けも感謝しています。

回答は2008年のVSでは正しいです。しかし、2012年と2012年に失敗します。Instartutilが変更されているため。

使用する必要があります$sn = """" + $serviceName + " " + $exeName + """"

その理由は、installutil(2.0)が引用符を自動的に追加するため、(答えのように)それらを無視する必要があるためです。しかし、Installutil(4)、これは、文字列に任意の場所に引用符が含まれている場合にスキップされます(これはバグですか? - 文字列の最初と終了に引用符があるかどうかを確認する必要がありました - 現在、これはすべての2.0コードを破ります)。

リフレクターはあなたの友達です。

役に立ちましたか?

解決

あなたの問題はこの行にあります:

$sn = """" + $serviceName + " " + $exeName + """"

より簡単なものに置き換える場合、またはこのようにする場合:

$sn = $serviceName.ToString() + " " + $exeName

それが動作します

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top