2017-10-20 7 views
-1

サービスとフォームを持つプロジェクトがインストールされています。このサービスは、フォームが作成するXMLファイルをロードします。サービスおよびフォームAppDatasへのパスは、私はむしろ、ローカルシステムよりも、ユーザーアカウントにサービスをインストールする必要がありましたXMLを使ってサービスとフォームを正しく通信する方法

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 

を使用して異なっているので、問題があります。私は、ほとんどのサービスがローカルシステムとしてインストールされていることに気付きます。これはサービスのパフォーマンスにどのような影響を及ぼしますか、これにアプローチするより良い方法はありますか?

+0

システムには環境がないため、フォルダへのパスはありません。私は通常のプロセスは管理者アカウントでプロジェクトを持ち、管理者として実行することだと思います。ユーザーアカウントとして実行することは同等ですが、ユーザーが(ユーザーでない限り)変更にアクセスできるようになります。パフォーマンスは、サービスの優先順位の設定に基づいています。多くの場合、システムサービスとして実行されるサービスは通常の優先順位で実行されるように設定されているため、オペレーティングシステムのパフォーマンスには影響しません。サービスの優先順位は、その要件に応じて設定する必要があります。 – jdweng

答えて

0

あなたの質問はあまりにも幅広いです。あなたのシナリオに近づける方法はたくさんあります。あなたはすでに実装があるので、の質問にお答えすることができます。

最初に、正規のユーザーとして実行すると、サービスがそのアカウントで正しく動作することを前提にして正常に動作するはずです。理想的ではありませんが、本当に何かを傷つけるべきではありません。通常、サービスには昇格された特権が必要です。これは、まずサービスである理由と、ローカルシステムまたはローカルサービスアカウントとして実行される理由です。しかし、あなたのサービスがそれらの特権を必要としない場合は、ユーザーアカウントを使用すると問題ありません。

あなたの説明によると、GUIプログラムはサービスが監視して読んでいる特別な場所にXMLファイルを書き込んでサービスを制御しているようです。プロセス間通信(IPC)の一形式としてのファイルシステムの使用自体は理想的ではないので、私は別のアプローチを推奨します。

すでにXMLベースのI/Oがあるので、名前付きパイプまたはその他のネットワーク/ソケットベースのIPCを使用することをお勧めします。 StreamWriterStreamReaderにストリームオブジェクト(例:PipeStreamまたはNetworkStream)をラップして、既に使用している通常のXMLを使用して、それに応じて読み書きできます。

もう1つの方法はWCFです。学習曲線が少しあり、データの送信に使用される正確なシリアライゼーションを少しは制御できませんが、Visual Studioのサポートにより、XML /シリアライゼーションの実装時間を短縮できます。 Visual Studioで追加するだけで、サービスの新しいクライアントを作成することができます。 IDEは、サービスに接続するために必要なデータ構造と構成を作成します。

どちらの場合でも、サービスの典型的なローカルシステムアカウントでサービスを実行できます。あなたが尋ねている問題は消え去ります。 :)

関連する問題