2012-03-23 10 views
1

私たちは、部分標準EXEであり、部分WinService EXEであるアプリケーションを持っています。標準のEXEはレジストリの実行セクションで生成され、ログインしたユーザーの資格情報でログイン時に有効になります.WinService EXEは自動実行に設定されているため、常に実行され、LocalSystem(基本的に管理者)。標準EXEとWinService EXEを互いに通信するにはどうすればよいですか?

XMLファイルに情報を書き込んでデータを共有するには、これら2つのプログラムが必要です。

ログインしたユーザーがインストール済みのフォルダ(C:\ Program Files \ ourApp)にアクセスすると、アプリケーションは正常に動作します。標準EXEはデータを書き込み、WinService EXEは問題なく読み取りますが、すべて正常です。

ただし、ログインしたユーザーがインストールされたフォルダへの書き込みアクセス権を持たない場合、データはUAC仮想化とデータリダイレクトに巻き込まれ、別の場所で終了し、WinServiceはそのファイルを見つけたり読み取れません。インストールされたフォルダ。

これを回避するために、標準EXEとWinService EXEの両方に%ProgramData%への書き込みと読み取りを試みました。これは、標準ユーザーに%ProgramData%への書き込み権限がないことを除いて、正常に動作します。

C:\ Users \ LoggedInUser \ AppData \ Localのログインユーザーで、winserviceの場合はC:\ Users \ Administrator \ AppData \ Localになるため、%LocalAppData%を使用することはできません。

UAC仮想化が有効になっているVistaとWin7には、ユーザー特権のみで実行される標準EXEとLocalSystemとして実行されるWinServiceの両方が互いに通信できる場所があります。レジストリを試しましたが、問題はさらに悪化しています。また最後は重要ですが。これは、コードの違いなしにXPで動作するために必要です。意味XPには、%ProgramData%、%LocalAppData%などの環境変数もあります。両方で動作することができますか?

+2

あなたが思いつく解決策は、2人のユーザーが同時にログインして(そしてアプリケーションを実行する)可能性に対処する必要があります。 –

+1

インストール中に '%ProgramData%\ YourAppDirectory'の権限を編集して、全員への書き込みアクセスを許可することができます。そこにはデフォルトの権限があります。誰でも新しいファイルとフォルダを作成できます。誰でもそれらを読むことができますが、作成者の所有者(および管理者)のみがこれらのファイルへの書き込みアクセス権を持ちます。そしてあなたはこれを変えることができます。また、 'Program Files'の権限も変更できますが、お勧めできません。さらに、 'Program Files'にデータを書き込むべきではありません。 –

答えて

3

つのアイデア:

  1. は、各アプリが名前付きパイプ トランスポートを使用してWCFエンドポイントを公開しており、彼らはあなたが選んだのシンプルなインターフェイス 上でお互いに話を持っています。
  2. のように通信するには、Memory Mapped Filesを使用してください。
+0

応答はとても素早く、ありがとう!私は実際に同僚にこの質問をしています(彼はstackoverflowアカウントを持っていないので、簡単な電子メールを入力して、ここに投稿してください)。月曜日に彼はあなたの提案(と他のもの)を試してみるでしょう。だから、ありがとう、うまくいけば、私はあなたの答えに緑色のチェックマークを適用するでしょう!私は努力のために、今、upvoteします。 – JustLooking

+1

@JustLooking:ディスクファイルを削除するのが便利でない場合は、ユーザーのローカルアプリケーションデータディレクトリ(またはサブディレクトリ)を使用し、名前付きパイプ(または同様のIPCメソッド)を使用してディレクトリパスを送信することをお勧めしますアプリケーションからサービスへ –

関連する問題