私たちは、部分標準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人のユーザーが同時にログインして(そしてアプリケーションを実行する)可能性に対処する必要があります。 –
インストール中に '%ProgramData%\ YourAppDirectory'の権限を編集して、全員への書き込みアクセスを許可することができます。そこにはデフォルトの権限があります。誰でも新しいファイルとフォルダを作成できます。誰でもそれらを読むことができますが、作成者の所有者(および管理者)のみがこれらのファイルへの書き込みアクセス権を持ちます。そしてあなたはこれを変えることができます。また、 'Program Files'の権限も変更できますが、お勧めできません。さらに、 'Program Files'にデータを書き込むべきではありません。 –