3

ユーザー データを取り込み、Windows のスケジュールされたタスクを作成しようとする ASP.NET Web サイト (C#) があります。もちろん、これは DEV マシンではうまく機能しますが、サーバーでは実行できません。タスクを作成するために ASPNET ユーザー (または匿名 Web ユーザー) に必要な権限を把握しようとしています。

エラーは次のとおりです。

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) 
Stacktrace: 
    at MyScheduler.NewWorkItem(String TaskName, Guid& rclsid, Guid& riid, Object& obj) 
    at MyScheduler.CreateTask(String name)

私はいくつかの検索を行いましたが、提案された解決策は、web.config 'impersonate' フラグを使用して、これらの権限を持たない可能性のある ASPNET アカウントとは対照的に、十分な権限を持つユーザーとしてアプリケーションを強制的に実行することです。

例:

<system.web>
    <identity impersonate="true" />
</system.web> 

残念ながら、これは問題を解決していないようです。私が読んだドキュメントから、これは匿名の Web ユーザーとして実行する必要がありますが、ユーザーには十分な権限がないようです。

マシンの管理者である特定のドメイン ユーザーを指定するように設定を変更しました。例:

<system.web>
    <identity impersonate="true" userName="WindowsDomain\YourUserName" password="YourPassword" />
</system.web> 

これにより、アプリケーションは Windows スケジュール タスクを正常に作成できました。したがって、明らかに、Windows 2003 の適切なアクセス許可のセットを使用して、アプリケーションを開発環境と同じように実行できます。ただし、ネットワークまたはマシンの管理者アカウントのユーザー資格情報をプレーン テキストで Web.config ファイルに配置するつもりはありません。

ASPNET アカウントを希望どおりに動作させるには、どのアクセス許可を正確に設定する必要があるかを知っている人はいますか?

編集: スケジュールされたタスクを作成するために Win32 API が使用されています。

4

4 に答える 4

1

完全ではありませんが、特定の問題を解決できました。スケジュールされたタスクを作成して実行するために必要な正確な権限をまだ特定していませんが、次のように動作するようです:

  1. <identity impersonate="true" />をWeb.configに追加します。
  2. IUSR ユーザー (偽装を使用してアプリを実行するユーザー) を "Backup Operators" グループに追加します。

これにより、アプリケーションは [スケジュールされたタスク] フォルダーにアクセスできるようになり、タスクを作成して実行できるようになります。

タスクがローカル システム アカウントとして実行されようとしていたという追加の問題がありました。残念ながら、実行中のユーザーとしてローカル システム アカウントを割り当てることができるのは管理者だけであるように思われるため、コードを正しく機能させるには、バックアップ オペレーターとしてではなく、管理者アカウントとして偽装する必要がありました。

于 2009-01-26T13:18:27.980 に答える
1

ASPNET ユーザーのアクセス許可について心配する代わりに、内部プロセスにより、マシン固有のアカウントを作成し、そこで資格情報を提供できますか?

于 2009-01-20T17:50:15.747 に答える
0

イベントログに何か書いていますか? コンポーネント(IISでホストされていると思いますか?)がイベントログに何かを書き込むためのアクセス権がない可能性があります。

これは単なる推測です〜少し前に、私は同様の問題に直面しており、次の方法で解決しました:

クリック

于 2009-01-20T17:48:40.227 に答える
-4

別のオプションは、サーバーの BIOS をフラッシュすることです

于 2009-03-10T17:56:43.547 に答える