私のマシン:Win7 32ビット、.net 4
.net 4に基づくコンソールプログラムがあり、3つのExcelファイルを生成し、SMTPサーバーを介してそれらを1つずつ送信します。
exeをダブルクリックするか、cmdで実行すると、正しく実行され、これら3つのExcelファイルを含む3つの電子メールが送信されます。
しかし、exeをタスクスケジューラに入れて、[実行]をクリックするとします。最初のメールのみが送信され、他の2通のメールはどういうわけか送信できませんでした。
何か案が?
私のマシン:Win7 32ビット、.net 4
.net 4に基づくコンソールプログラムがあり、3つのExcelファイルを生成し、SMTPサーバーを介してそれらを1つずつ送信します。
exeをダブルクリックするか、cmdで実行すると、正しく実行され、これら3つのExcelファイルを含む3つの電子メールが送信されます。
しかし、exeをタスクスケジューラに入れて、[実行]をクリックするとします。最初のメールのみが送信され、他の2通のメールはどういうわけか送信できませんでした。
何か案が?
プログラムがタスク スケジューラによって実行されているときに何が起こっているかを実際に把握するには、次のようなコードの重要なステップに Trace ステートメントを配置します。
Trace.WriteLine("Start creating mail object");
と
Trace.WriteLine(string.Format("Exception occured: {0}\r\n{1}", ex.Message, ex.StackTrace);
Trace.WriteLine
何か問題が発生した場合にわかるように、例外ハンドラ内に a を入れることを忘れないでください。
.config ファイル内でリスナーを構成することにより、これらのステートメントが書き込まれる場所を制御できます。
次の例では、EventLogTraceListener
という名前のオブジェクトmyListener
を Trace.Listeners コレクションに追加します。このパラメーターは、コンストラクターinitializeData
に渡されるイベント ログ ソースの名前を指定します。EventLogTraceListener(String)
<configuration>
<system.diagnostics>
<trace autoflush="false" indentsize="4">
<listeners>
<add name="myListener"
type="System.Diagnostics.EventLogTraceListener"
initializeData="TraceListenerLog" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
Start
>に移動して、イベントビューアを開くことができますeventvwr
これが問題の原因を理解するのに役立つことを願っています。この時点では誰にも推測できないからです。
問題: .net C# コンソール アプリケーションをコーディングして、ドキュメントを共有ドライブから SharePoint ドキュメント ライブラリにアップロードします。Service Account としてログインした場合、実行中に問題は検出されず、ファイルは問題なく SP ドキュメント ライブラリに転送されました。ただし、タスク スケジューラ経由で実行すると、「system.io.directorynotfoundexception....」エラーが発生しました。また、個人アカウントを使用して、サーバーにログインしている間、または個人アカウントを使用して .exe を実行するタスク スケジューラ経由でコードを実行する際に問題はありませんでした。
分析: サービス アカウントの場合。アクセス可能だったコードでマップされたドライブに記録されます。ただし、タスク スケジューラはマップされたドライブ (つまり、s:\xxxxx Reports\) を読み取ることができませんでした。
解決策: アクセスされたファイルは EMC VNX Windows ファイル共有からのものであることに注意してください。ドキュメントの場所を参照するコンソール アプリケーション コードをパス \server.com\vnxcifs01\Saved_xxxx_Report_Outputs\xxxxxxxxxxx Scheduled Reports に変更しました。この変更の後、exe を再構築すると、タスク スケジューラは魅力的に機能しました。
これが、同様の環境で作業している人の助けになることを願っています。