2017-05-30 7 views
0

私は以下のコードを使用して、リモートサーバーアップタイプのサービス開始をC#を使用して手動/自動に変更しています。ここリモートマシンのサービス開始タイプを遅延(自動)に変更する

public static void ChangeServiceStartupType() 
    { 

     string query1 = "select * from Win32_Service where name = 'myservice' "; 


     string server = "servername"; 
     ConnectionOptions connectoptions = new ConnectionOptions(); 

     connectoptions.Username = @"username"; 
     connectoptions.Password = "password"; 

     ManagementScope scope = new ManagementScope(@"\\" + server + @"\root\cimv2"); 
     scope.Options = connectoptions; 
     scope.Connect(); 

     ObjectQuery query = new ObjectQuery(query1); 
     ManagementObjectSearcher managementObjectSearcher = new ManagementObjectSearcher(scope, query); 
     ManagementObjectCollection managementObjectCollection = managementObjectSearcher.Get(); 
     foreach (ManagementObject mo in managementObjectSearcher.Get()) 
     { 
      string name = mo.Properties["Name"].Value.ToString().Trim().ToLower(); 
      string state = mo.Properties["State"].Value.ToString().Trim(); 
      string startmode = mo.Properties["StartMode"].Value.ToString().Trim(); 
      changemode(mo, "Automatic"); 
     } 
    } 

はchangemodeでchangemode方法

private static void changemode(ManagementObject mo, string startmode) 
    { 
     ManagementBaseObject inParams = mo.GetMethodParameters("ChangeStartMode"); 
     inParams["startmode"] = startmode; 
     ManagementBaseObject outParams = mo.InvokeMethod("ChangeStartMode", inParams, null); 
     startmode = mo.Properties["StartMode"].Value.ToString().Trim(); 
    } 

Iにパラメータを渡す手動又は自動ある(オブジェクト、STARTMODEパラメータ)サービスは、自動からタイプ変更を起動マニュアルに、その逆にただし、自動(遅延開始)に変更することはできません。

私は自動(遅延開始)は、どのように私はこれを達成ん自動遅延遅延オートを試してみましたか?

答えて

0

documentationを見ると、ChangeStartMode Win32メソッドを使用して遅延でサービスを開始することはできないようです。あなたがServiceInstallerを使用する場合は何をしたいこうすることと同様に、非常に簡単です:

myServiceInstaller.StartType = ServiceStartMode.Automatic; 
myServiceInstaller.DelayedAutoStart = true; 

しかし私はそれはオプションではありません推測しているので、我々は深く掘る必要があります。

ServiceクラスにはDelayedAutoStartプロパティがありますが、読み取り専用です。それを遅らせるようにしたいのであれば、P/Invokesを使いこなす必要があります。私が見つけることができるすべての情報はChangeServiceConfig2this構造体を指しています。

また、このコマンドを実行するだけで同じ効果が得られます。しかし、あなたの質問に対する答えではなく、単に回避策にすぎません。

sc.exe config myService start= delayed-auto 

最後に、Peter Kellyによってthis(非常に)長いユーザーKramiiによって答え、およびthisをチェックしてください。両方とも、この種のことをもっと簡単にするためのヘルパークラスを書いています。私はそれらをテストしていないが、彼らは有望に見える。

+0

感謝@Styを開始する方法について

その他のドキュメント。私はそれを行う方法を考え出した:) –

0

スティーズの答えでは、作成時に自動的にサービスが遅れるように設定できます。導入後ではありません。

sc \\computername config *servicename* start= delayed-auto 

ことを行うことができますコマンドラインがあり

私は、WMI 管理クラスを使用してリモートサーバにこのコマンドラインを実行し、それが正常に動作します。リモートご入力のためのプロセスにhere

+1

実際に私は私の答えにコマンドオプションを含めた。あなたが問題を解決できるとうれしいです。 – stybl

関連する問題