2

通常のユーザーとして実行されているユーザー インターフェイスがあります。

ユーザー インターフェイスは、Windows サービスとして実行されているサーバー コンポーネントと tcp/ip を介して通信します。

サービスはローカル システムとして実行されます。

私の問題は、サービスが「ProgramData\MyApp」の下に新しいフォルダーを作成することです。これらの新しく作成されたファイルとフォルダーは、「システム」によって作成されたものであるため、通常のユーザーは開くことができません。

セットアップ プロセス中に、ディレクトリ "ProgramData\MyApp" のアクセス許可は既に変更されているため、全員がフル アクセスできます。ただし、サービスによって作成されたサブフォルダーには継承されません。

サービスは、作成されたファイルとフォルダーのアクセス許可を変更する必要がありますか? または、「ProgramData\MyApp」フォルダーを準備して、新しく作成されたファイルとフォルダーに誰もがアクセスできるようにすることはできますか?

修正済み: 私の問題は、間違った権限を持つファイルが一時ディレクトリからコピーされたことでした。一時ディレクトリからの権限が継承されました...

4

2 に答える 2

2

Windows サービスがローカル システムとして実行されている場合は、フォルダーを作成するコードに偽装を使用する必要があります。このようにして、サービスを呼び出すユーザーは、フォルダーとファイルに対する完全な権限を持ちます。

使用できる任意のローカル ユーザーがフォルダーにアクセスできるようAddAccessRuleにする場合は、こちらを参照してくださいC# - Windows 7 ですべてのユーザーのディレクトリ アクセス許可を設定する

于 2012-10-26T09:21:30.063 に答える
0

なりすましは使用しないでください。ファイルのアクセス許可を設定するだけです。

ディレクトリの例を次に示します: https://stackoverflow.com/a/5398398/70386 (ファイルでも同じように機能します)

MSDN:

于 2012-10-26T10:39:21.520 に答える