web-dev-qa-db-ja.com

RoboCopyを実行するサービスの作成

ユーザー入力に応じてrobocopyタスクをサービスとして設定するバッチファイルをまとめようとしています。基本的な考え方は、ユーザーがMyRobocopyBatchFile.bat sourceFolder destinationMachineを入力し、それ以降、destinationMachineの既知のフォルダーにミラーリングされたフォルダーの内容を入力することです。サービスは自動的に開始するように設定されるため、起動時に実行されます。このために私は この質問 からキューを取りました

このターゲット環境はWindowsServer 2008 R2です。

これを行う方法についての私の意図は

set destination=\\%2\RunSheets
set source=%~dp0%1
echo Setting source to %source%
echo Setting destination to %destination%
set serviceName=RunSheetCopy%2

sc create %serviceName% binPath= "c:\Windows\System32\robocopy.exe %source% %destination% /MIR /MON:1 /v /log:C:\Logs\RoboCopy\%serviceName%.log /LEV:1" start= auto DisplayName= %serviceName% 

sc start %serviceName%

次のようなユーザー入力で:

MyRobocopyBatchFile.bat .\RunSheets 10.20.30.40

私が直面している問題は、バッチファイルがサービスを開始するときにエラーメッセージが表示されることです。 NetStartを起動するとき、またはサービスウィンドウを介して起動するときにも、同じエラーメッセージが表示されます。エラーメッセージは次のとおりです。

 [SC] StartService FAILED 1053:

 The service did not respond to the start or control request in a
 timely fashion.

エラーメッセージにもかかわらず、robocopyはディレクトリを同期していますが、モニターモードでは続行されません。

Robocopyをサービスとして実行する方法について何か助けがあれば大歓迎です。

N.B.プロダクトマネージャーは、サービスのアイデアに非常に熱心です。

更新:PMを幸せにするメカニズムでこれを行う方法がなかったので(SrvAny、レガシーであることはオプションではありませんでした)、私はサービスラッパーを一緒にハッキングすることになりましたRoboCopy、それは私が望んでいた解決策ではありませんが、それは仕事をします。

2
Klee

私は数年前にそのようなものをセットアップすることができました...しかし、どのように覚えていません!だから私は私の古いVMを確認するために電源を入れました。

Windows 2003リソースキット に付属の srvany.exe ユーティリティを使用しました。

このユーティリティは、最近のバージョンのWindowsでは実際にはサポートされていませんが、Windows 2008 R2では機能します

前のリンクから、この重要な点に注意してください:

ただし、SCはSRVANYの代わりにはなりません!SCはサービスの作成/インストールに役立ちますが、通常の実行はできません。 srvany.exeのようなWindowsサービスとしての非サービス実行可能ファイル。

これが、エラーメッセージが表示される理由です。 Robocopyコマンドはサービスの開始時に実行されますが、Windowsサービスとして実行するように設計されていないため、クラッシュします。


  1. ワークステーションrktools.exeをダウンロードしてインストールし、必要なファイルのみsrvany.exeをサーバーのどこかにコピーします(c:\Toolsとしましょう)。

  2. 次に、srvanyのWindowsサービスを作成します。

    sc create Robocopy-Service binPath= "C:\Tools\srvany.exe" start= auto
    
  3. レジストリを開き、次の場所に移動します:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Robocopy-Service

  4. Parametersという名前の新しいキーを作成します

  5. その新しいキーの下に、3つの新しい文字列値を作成します。

    • AppDirectory:c:\ windows\system32
    • アプリケーション:c:\ windows\system32\robocopy.exe
    • AppParameters:c:\ source c:\ dest/MIR/MON:1

最後にRobocopy-Serviceという名前のサービスを開始すると、すべてが正常に機能するはずです。

ここから、バッチファイル内の処理を自動化できますが、レジストリ設定を操作するには、 reg.exe (またはregedit.exe)を使用する必要があります。

私のブックマークで、私を助けてくれた元のリンクも見つけました: https://plus.google.com/112485889729268615636/posts/bH8rSDo5ocC

4
krisFR

古い投稿、新しい回答49.95ドルで、これでうまくいくはずです。 OneDriveビジネスをサービスとして実行するために取り組んでいます。 http://www.coretechnologies.com/products/AlwaysUp/

これがあなた自身を転がす別の候補(無料)です: http://www.rozanski.org.uk/services

SVC.EXE概要。 SVC.EXEは、NTサービスを管理するためのシンプルなWindows NTコマンドラインプログラムです。サービスを一覧表示でき、個々のサービスを表示、インストール、変更、または削除できます。サービスの依存関係を定義する機能が含まれています。プログラムは、stdinから必要なすべての情報を要求します。ほとんどのプロンプトでは、?と入力します。ヘルプメッセージが表示されます。

警告-このプログラムを実行する前に、レジストリをバックアップすることをお勧めします。 (使用中に問題が発生したことはありませんが。)

SVC.EXEは、同じ名前のMadfinderスパイウェアプログラムとは無関係であることに注意してください。詳細については、ここをクリックしてください。

SRVSTART.EXE

あらすじ。 SRVSTART.EXEはWin32実行可能ファイルであり、DLLこれにより、コマンドをWindows NTサービスであるかのように実行できます。また、通常のコンソールコマンドの実行を強化する機能もいくつかあります(パラメータの入力など)。 DLLを単独で使用して、サービス管理コードを記述せずにサービスを構築できます。

SRVSTART.EXEは、2つのモードのいずれかで動作します。

It can be used to run an ordinary command (executable program batch file). In this command mode, SRVSTART.EXE can Prompt the user for the values of command-line parameters such as passwords.
It can be used to run an executable program in the context of a Windows NT service (service mode). SRVSTART.EXE will itself handle all of the interactions with the NT Service Control Manager (SCM). It is not necessary for the program to include any service management code. 

SrvStartアワード

SRVSTART.EXEは、もともとZDNetDownloadsによって最高の5つ星エディターズチョイス評価を与えられました。残念ながら、Ziff-Davisはソフトウェア開発者(私のようなフリーウェア開発者でさえ)にリストされる料金を請求することを決定したので、私のソフトウェアはもはや彼らのサイトで機能しません。

0
Rickkee