| Q | 現在、次のスクリプトをサイトで使用するよう試みています (http://www.microsoft.com/japan/technet/community/columns/insider/iisi1201.mspx)。 <%
Dim objMail
Set objMail = Server.CreateObject("CDONTS.NewMail")
objMail.From = "yourname@youremail.com"
objMail.Subject = "CDONTS で送信するサンプル メール"
objMail.To = "someone@somwhere.com"
objMail.Body = "ここにメッセージを記入"
objMail.Send
set objMail = nothing
%>
しかし、サーバーからは常に次のエラー コードが返されます。 Microsoft VBScript 実行時エラー '800a0046' - 書き込みできません。 |
| A | CDONTS は、Windows NT 4.0 上で IIS 4.0 を使用する際にイン プロセス コンポーネントとして稼働するよう設計されました。アプリケーションをアウト プロセスで実行すると、MTS.EXE (IIS 4.0)、または IWAM_<コンピュータ名> アカウントを使用した DLLHOST.EXE (IIS 5) プロセスで実行されます。アプリケーションをアウト プロセスで実行する場合、IWAM アカウントでは、ファイルとシステム リソースへのアクセスを必要とする場合があります。CDONTS オブジェクトの場合、IWAM アカウントでは、システムの MachineKeys (Microsoft サポート技術情報の Knowledge Base の文書 318478 (英語) を参照) と、Inteinfo\Mailroot フォルダ内の一部のフォルダ (Microsoft サポート技術情報の Knowledge Base の文書 260985 (英語) を参照) へのアクセスを必要とします。 この情報を考慮したうえで、いくつかの可能性について検討します。まず、基本的な方針として、CDOSYS オブジェクト (「IIS Insider - 2001 年 12 月」を参照) を使用するようにアプリケーションを記述し直す必要があります。これにより、CDONTS オブジェクトが Windows 2000 または Windows Server 2003 にインストールされない場合でも、将来的なサポートが保証されます。この方法が問題の解決に十分であるかどうかは、状況によります。第 2 に、CDONTS アプリケーションをイン プロセスではなくアウト プロセスで実行すると、ほとんどの場合で IWAM ユーザー アカウントのアクセス許可に関する問題に遭遇します。CDONTS アプリケーションをイン プロセスで実行することは、セキュリティ上の理由から不可能であるか望ましくないこともありますが、IWAM アカウントに関連するアクセス許可の問題を回避することができます。Mailroot と MachineKeys に適切なアクセス許可があることを確認してください。第 3 に、ASP スクリプトを起動するユーザーが Mailroot\Pickup フォルダに対する適切なアクセス許可を保持していない場合も、この事例のようなエラーが発生します。既定では、MailRoot フォルダは、Everyone - フル コントロールに設定されていますが、これでは許可の範囲が広すぎます。Authenticated Users に "読み取り/書き込み" を割り当て、System と Administrators にフル コントロールを割り当てることをお勧めします。これにより、IUSR ユーザーと IWAM ユーザーは、他のユーザー アカウントと同様に SMTP フォルダにメールを書き込むことができます。また、これらのフォルダでは、IUSR_<コンピュータ名> の実行を拒否する必要があります。IIS ロックダウン ツールを実行している場合、この目的で Web Anonymous Users ローカル グループを使用できます。Web Applications グループの "書き込み" アクセス許可は、拒否しないでください。 |
| Q | IIS 5.0 で、[アプリケーション保護] を [中 (プール)] とする既定の設定でアプリケーションを実行するよう試みました。このように設定すると、次のようなエラー メッセージが返されます。 エラー コード 800800005 - サーバーの実行に失敗しました。 IIS をアンインストールしてから再インストールしましたが、やはり同じメッセージが返されます。この問題を解決するにはどうすればよいでしょうか。 |
| A | このメッセージは、通常、サーバーのセットアップまたは IIS のインストール中に何か不具合が発生したことを示します。%systemroot% フォルダ (通常は \Winnt) 内の IIS5.log ファイルで "FAIL" という語をチェックしてください。その部分がおそらく問題の発生した場所です。このメッセージには、有益な情報の含まれるイベント ビューアのメッセージが付属するのが普通です。また、既定で \Inetpub\Adminscripts フォルダにある Synciwam.vbs を実行することも役立ちます。最後に、多少知られているヒントを紹介します。[コントロール パネル] ウィンドウの [アプリケーションの追加と削除] アイコンをクリックし、[Windows コンポーネントの追加と削除] をクリックします。何も変更を加えず、[OK] をクリックします。こうすることで、Windows 2000 により、IIS と COM+ オブジェクトの設定に対して検証テストが実行されます。 |
| Q | コマンド プロンプトから IIS を再起動するにはどうすればよいですか。 |
| A | Windows 2000 の [サービス] コンソールを開き、[IIS Admin Service] をクリックして表示されるダイアログ ボックスの [依存関係] タブをクリックすると、IIS Admin サービスは、RPC サービスと Protected Storage サービスに依存しており、SMTP、World Wide Web Publishing サービス、および FTP と NNTP (非表示) に依存されていることがわかります。IIS Admin サービスを停止すると、このサービスに依存するサービスも停止します。ただし、IIS Admin サービスを開始しても、依存するサービスは自動的に開始されません (この動作は IIS 4 でも同様です)。 IIS の停止と開始を行うには、通常のシャットダウン操作を行ってから、すべての IIS サービスを起動する必要があります。 これを実行するには、いくつかの方法があります。IIS 5 では、IIS と関連サービスを停止してから開始する IISRESET コマンドをコマンド プロンプトから実行できます。IISRESET には、REBOOTONERROR や NOFORCE などの使用可能なスイッチがいくつかあり、リモート サーバーから呼び出すことができます。IISRESET は、IIS 4 では使用できません。 別の方法としては、コマンド プロンプト、バッチ ファイル、またはスクリプトで "NET STOP IISADMIN /y" を実行します。このコマンドは、IISADMIN サービスに依存するすべてのサービスを自動的に停止します。シャットダウン中、依存するサービスは [自動] に設定されます。IISADMIN サービスを開始しても、これらの依存するサービスは自動的に起動しません。反対に、依存するサービスのいずれかを開始すると、IISADMIN が起動します。したがって、サーバーを再起動するには、各 IIS インターネット プロトコル サービスを開始する一連のコマンドを実行します。次に、例を示します。 NET START W3SVC NET START SMTPSVC NET START FTPSVC このようにサービスを開始すると、IISADMIN サービスも自動的に起動します。 この方法でサービスを再起動する場合、タイミングが重要になる場合があります。大きいメタベースがある場合、IISADMIN サービスが完全に起動するまでに多少時間がかかります。通常は必要ありませんが、タイミングの適切な調整のために、状況に応じて起動スクリプトに一時停止する部分をいくつか配置します。 以上の方法に加え、VBScript、Perl、または WMI スクリプトを記述して同様の機能を実現することもできます。特に、WMI には、Windows 2000 と Window Server 2003 のサーバー管理に関する多くの機能が含まれます。Web サーバーを監視して、サービスが稼働しているかどうかを確認し、稼働していない場合は W3SVC を自動的に再起動する WMI スクリプトのサンプルの作成方法については、「Tales from the Script - 2003 年 1 月 (英語)」を参照してください。 |
これまでの IIS Insider コラムの質問と答えの一覧は、ここをクリックしてください。