2016-11-03 8 views
0

私は常時サービスとして動作させたいだけの単純なコンソーアプリで、VBテンプレートはありません。右exeファイルの互換性をクリックして c#console app as service

  • はとてもセキュリティ設定を開いて「管理者として実行」を選択

    • がマニフェストでhighestAvailable許可を与え、およびプロパティ
    • にマニフェストバインド:

      は、これまでのところ私が持っています「誰も」、管理者、サービス、システム、ネットワークサービス、ローカルサービス、および一部のユーザーはすべて完全なアクセス権を持っています。

    • が正常にこのコードをサービスリストに追加され、コードはまた、マニフェストとし、管理者として実行して、別々の溶液の形態で実行される:アプリケーションが、サービスリストにそれを行った

    private static void cmd_PROMPT(string cmd) 
    { 
        ProcessStartInfo cmdStartInfo = new ProcessStartInfo(); 
        cmdStartInfo.FileName = @"C:\Windows\System32\cmd.exe"; 
        cmdStartInfo.RedirectStandardOutput = true; 
        cmdStartInfo.RedirectStandardError = true; 
        cmdStartInfo.RedirectStandardInput = true; 
        cmdStartInfo.Verb = "runas"; 
        cmdStartInfo.UseShellExecute = false; 
        cmdStartInfo.CreateNoWindow = true; 
        cmdStartInfo.Arguments = "/user:Administrator "; 
    
        Process cmdProcess = new Process(); 
        cmdProcess.StartInfo = cmdStartInfo; 
        cmdProcess.ErrorDataReceived += cmd_Error; 
        cmdProcess.OutputDataReceived += cmd_DataReceived; 
        cmdProcess.EnableRaisingEvents = true; 
        cmdProcess.Start(); 
        cmdProcess.BeginOutputReadLine(); 
        cmdProcess.BeginErrorReadLine(); 
    
        cmdProcess.StandardInput.WriteLine(cmd);  
        MessageBox.Show(">>" + cmd); 
        //cmdProcess.WaitForExit(); 
    } 
    
    
    private void button3_Click(object sender, EventArgs e) 
    { 
        string s; 
        string prgmName = "@[email protected]"; 
        string prgmPath = "c:\\@[email protected]\\aquaService.exe"; 
        string prgmMode = "auto"; 
        s = "sc create " + prgmName + " binpath= " + prgmPath + " DisplayName= \"" + prgmName + "\" start= " + prgmMode; 
    
        cmd_PROMPT(s); 
    } 
    
    コントロールパネルですが、「停止」しています...クリック...アクション...サービスを開始すると、試行されますが、error:1053 did not start in timely fashionで失敗します。
    私はCMD命令を使用する場合、それはサービスリストで「開始」に変更されますが、その後、停止する権利戻っ:あなたの手掛かりと

      prgmName = "@[email protected]"; 
         prgmPath = "c:\\@[email protected]\\aquaService.exe"; 
         prgmMode = "auto"; 
         s = "sc start " + prgmName; 
         cmd_PROMPT(s); 
    
  • +0

    サービスは特定のルールに従わなければなりません。サービスコントローラーと対話する必要があります。それはサービスとして書かれなければならない。通常のexeを実行している場合は、タスクスケジューラを使用します。 Windowsリソースキットには、exeを実行するサービスであるSvcanyというプログラムがあります。ウィンドウとの通信を処理して、サービスコントローラーが満足できるようにします。 –

    答えて

    0

    TY麺、私はこのコードの作業を取得することができました:

    private void button3_Click(object sender, EventArgs e) 
        { 
         string s; 
         string prgmName = "@[email protected]"; 
         string prgmPath = "c:\\@[email protected]\\aquaService.exe"; 
         string prgmMode = "auto"; 
         string _subKey = "Parameters"; 
         string keyName = "Application"; 
         RegistryKey _baseRegistryKey; 
         s = "C:\\@[email protected]\\instsrv.exe " + prgmName + " C:\\@[email protected]\\srvany.exe"; 
         cmd_PROMPT(s); 
         s = "sc config " + prgmName + " start=auto "; // boot 
         cmd_PROMPT(s); 
         try 
         { 
          _baseRegistryKey = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\services", true); 
          var sk1 = _baseRegistryKey.CreateSubKey(prgmName); 
          _baseRegistryKey = sk1; sk1 = _baseRegistryKey.CreateSubKey(_subKey); 
          if (sk1 != null) { sk1.SetValue(keyName.ToUpper(), prgmPath, RegistryValueKind.String); } 
         } 
         catch (Exception ee) 
         { 
          MessageBox.Show(" " + ee, "Administrator"); 
         }    
         Thread.Sleep(5000); 
         prgmName = "@[email protected]"; 
         prgmPath = "c:\\@[email protected]\\aquaService.exe"; 
         prgmMode = "auto"; 
         s = "sc start " + prgmName; 
         cmd_PROMPT(s);  
        }