1

Microsoft の PSExec ツールと同様の機能を提供するツールを作成しましたが、Java から実行します (「Exec」コマンドなし) https://dev.c-ware.de/confluence/display/PUBLIC/JRWShell+-+ A+Java+library+for+remote+controlling+a+windows+shell

私の問題は、通常、ライブラリが作成したサービスを自動的に停止してアンインストールすることですが、通信障害が発生した場合、これは自動的には行われません。動的に作成されたサービスが接続を開始してリッスンし、接続が閉じられた後に終了するようにしたいと思います。理想的には、Windows サービスが自動的に終了してアンインストールされるようにしたいのですが、停止したサービスを自動的にクリーンアップする 2 つ目の Watchdog サービスを使用しないと、自動アンインストールができない可能性があると思います。

私の質問は、サービス自体をアンインストールすることは可能ですか? もしそうなら、これはどのように行われますか?それが不可能な場合、どうすればサービス自体を停止させることができますか?

4

2 に答える 2

2

サービス内からサービスをアンインストールできることが判明しました。ただし、サービスは、サービスがまだ実行中であり、終了後に削除される限り、サービスリストにとどまるようです。

于 2012-09-28T14:26:41.197 に答える
0

私は次のコードを使用していますが、それは私のサービスで機能しています。しかし、セットアップ プロジェクトでカスタム アクションをアンインストールするための "net stop serviceName" プロセスも追加します (おそらく重要です)。

    private static string getMsiexecParameters()
    {
        return string.Format("/x {0} /quiet /qn", GetProductCode(CProductName));
    }

    public static string GetProductCode(string productName)
    {
        string query = string.Format("select * from Win32_Product where Name='{0}'", productName);
        using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
        {
            foreach (ManagementObject product in searcher.Get())
                return product["IdentifyingNumber"].ToString();
        }
        return null;
    }

    public static void Uninstall()
    {
        ProcessStartInfo psi = new ProcessStartInfo("msiexec.exe", getMsiexecParameters());
        Process.Start(psi);
    }

余分なコードでごめんなさい、それは私の仕事のプロジェクトからのものです

于 2015-06-14T10:31:41.520 に答える