質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.49%

  • C#

    7394questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Windows

    1489questions

    Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

  • サーバ

    787questions

    サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

  • SQL Server

    602questions

    SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

  • バッチファイル

    228questions

    バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

バッチファイルをタスクスケジューラで起動時にイベントでのエラーが発生する原因の切り分けについて

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 4,822

DinKa

score 31

いつもお世話になっています、今回はWindowsServer2012でのエラーメッセージ(Application Error、.NET Runtime)について、教えてください。

前提

2台のWindowsServer2012(仮想サーバーなので実質1台)に、SQLServer2014と、Webアプリをそれぞれ実装しています。
その中で、SQLServer側にタスクスケジューラとして、毎日帳票出力のバッチを起動するタスクがセットされています。
このタスクは毎日18時に起動して、トリガーされた後に、1時間ごとに無期限に繰り返します。
ただし、このタスクスケジューラは、毎時起動には成功しているようですが、バッチファイルが実行されていないように見えます。
イベントビューアーのログを見てみると、2016/03/25 0:00:00より毎時二つのエラーが発生していました。

レベル:エラー ソース:.NET Runtime イベントID:1026 タスクのカテゴリ:なし
レベル:エラー ソース:Application Error イベントID:1000 タスクのカテゴリ:(100)

なぜ、このタイミングからエラーによって失敗しているのかが分かりません。
原因の一つとして考えられるのは、前任者が前日(2016/03/24)に、
「自分がいなくなるからサーバーバッチ起動用のIDとパスを設定しておいたから」
という言葉が気になっています。
プログラム自体はその前日まで走っていたものなので、想定ではプログラムの方は問題ないはずです。

次際にタスク側を見てみると、
タスクの実行時に使うユーザーアカウントが、バッチ用のアカウントに変更されています。
(ユーザーがログオンしているかどうかにかかわらず実行する、パスワードを保存しないにチェックが入っています)

まず、何が問題なのかを切り分けようと思っているのですが、他のチェック項目を変更したり、
ユーザーアカウントを変更したりしても結果が変わりませんでした。

実現したいこと

・どのような切り口で、問題を特定すればよいでしょうか?
・また、原因がプログラムで無い場合はどのように修正したらよろしいでしょうか?

前置きが無くなりましたが、よろしくお願いします

発生している問題・エラーメッセージ

  • System 

  - Provider 

   [ Name]  .NET Runtime 

  - EventID 1026 

   [ Qualifiers]  0 

   Level 2 

   Task 0 

   Keywords 0x80000000000000 

  - TimeCreated 

   [ SystemTime]  2016-03-24T15:00:00.000000000Z 

   EventRecordID 6342 

   Channel Application 

   Computer ServerName.xx.xxxx.com 

   Security 

  • EventData 

   アプリケーション:Ap_BatchApp.exe フレームワークのバージョン:v4.0.30319 説明: ハンドルされない例外のため、プロセスが中止されました。例外情報:System.UnauthorizedAccessException スタック: 場所 System.IO.__Error.WinIOError(Int32, System.String) 場所 System.IO.File.InternalDelete(System.String, Boolean) 場所 System.IO.File.Delete(System.String) 場所 Ap_BatchApp.Utils.LogManager.SetUp() 場所 Ap_BatchApp.Program.Main(System.String[])  

  • System 

  - Provider 

   [ Name]  Application Error 

  - EventID 1000 

   [ Qualifiers]  0 

   Level 2 

   Task 100 

   Keywords 0x80000000000000 

  - TimeCreated 

   [ SystemTime]  2016-03-24T15:00:01.000000000Z 

   EventRecordID 6343 

   Channel Application 

   Computer ServerName.xx.xxxx.com 

   Security 

  • EventData 

   Ap_BatchApp.exe 
   1.0.0.0 
   56cbfa20 
   KERNELBASE.dll 
   6.3.9600.17055 
   532943a3 
   e0434352 
   00011d4d 
   1be4 
   01d185ddd669f45c 
   C:\ApBatch\Ap_BatchApp.exe 
   C:\Windows\SYSTEM32\KERNELBASE.dll 
   1523eaf9-f1d1 

補足情報(言語/FW/ツール等のバージョンなど)

C#/ASP.NET Framework 4.5/ ASP.NET MVC 5.2.3/ VisualStudio Pro

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

情報:System.UnauthorizedAccessException

なんかの権限違反らしいっすね。

場所 System.IO.File.Delete(System.String) 
場所 Apri_BatchApp.Utils.LogManager.SetUp() 

ファイル削除で落ちてる?
LogManager.Setupってんだから昔のログファイルを消そうとしてる?
いずれにせよそこらへんのフォルダに対して今のユーザにアクセス権限あるかどうかを最初にチェックしてみては?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/29 17:00

    お早いご回答ありがとうございます。
    やはり権限違反なのですね。
    まずは、権限に関して確認させていただきます。

    キャンセル

  • 2016/03/29 17:32 編集

    ありがとうございました、本番環境はフォルダのプロパティ→セキュリティ→編集でbatchのアカウントにアクセス許可(フルコントロール)を与えたところ、無事エラーなく完了しました。

    開発環境では、別な管理者権限を持つアカウントが存在しており、そのアカウントでタスクを起動していますが、こちらが正常にバッチ処理が行えないのはまた別件のようです。
    本番環境が修正できたので、開発環境は合間を見ながら確認してみます。

    あとまだしっかり理解はできていないのですが、なぜ日が変わるタイミングで突如できなくなったのかがわかっていません。
    この内容は正しくは理解できていませんが、おそらくタスクスケジュールが18時スタートではあるもの、前タスクの有効期限が無期限なので、日が変わるまではアカウントの更新がかからないということなのかなと、自分で推測してみました。
    間違っていましたらご指摘いただけると幸いです。

    キャンセル

0

続報というか、他にも問題はありそうなので、追記しておきます。

・ファイルを直接編集・保存できない
バッチファイルの中身を調査し、内容に不適切な個所があったので、修正して保存しようとしたところ上書き保存ができませんでした。
理由:ファイルのデータオーナーが前任者になっていたため
対応方法:ファイルのプロパティ→セキュリティの詳細設定→変更で所有者を自身にしてOK
※これが正式な方法なのかはわかりませんが、自分はこれでできるようになりました

・エラーは出なくなったが、実行結果がエラーになるときがある
1時間ごとに起動するタスクスケジューラによって、バッチファイルを開始させていますが、タスク自体は実行されているものの、処理が正しく行われていないようです。
となると、やはりプログラム側(バッチファイルに限らず)が問題なのかなと思います。
手動でバッチを起動するときは実行結果は正しくなるのですが、昨日設定した夜間バッチは残念ながらエラーが帰ってきてしまってました。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/31 09:51

    プログラミングとは関係ないですが、「前任者」からの引き継ぎがうまくいってないのは明白です。
    「前任者」に連絡して質問してみるのが一番いい気がします。
    # ここでの回答者はDinKaさんの業務内容ももろもろの環境や背景もわからないので。

    キャンセル

  • 2016/03/31 11:24

    前日のバッチでやはりエラーが出てしまったので調査しましたら、タスクスケジューラにおいて、最上位の特権で実行するにチェックを入れることで解消できました。

    tkturboさん、ありがとうございます。
    引き継ぎに関しては正直なところ「前任者」が全くやる気がなかったため、こうなることはある程度予測していました。
    会社としても「前任者」を会社都合で職を解く以上、強くは言えなかったというのもありますが。
    そういう意味でも、連絡して有効な回答を得るのはほぼ無理だと思ってます、残念なことではありますが。

    キャンセル

  • 2016/04/05 11:02 編集

    どうやらそう単純なことではなさそうでした。

    自分で作った"最上位の特権で実行する"にチェックを入れたタスクは、しっかりexeファイルを実行して正常終了していましたが、前任者が作ったタスクに"最上位の特権で実行する"にチェックを入れた場合は、実行結果が異常終了していました(データをダウンロード時に失敗していることに気づきました)。
    フォルダ、ファイルともに前任者が作ったアカウントにはフルコントロールの権限が与えましたので、また振出しに戻りました。
    引き続き調査してみます。

    キャンセル

  • 2016/04/05 11:32

    「実行結果が異常終了していました(データをダウンロード時に失敗」←これもイベントログから原因が探れるかもしれません。
    対処療法になってしまいますが、一つずつ原因をつぶしていくしかありませんね。

    キャンセル

  • 2016/04/05 11:55 編集

    都度見ていただいてありがとうございます。

    今回はイベントログにはエラーは出力されていませんでした。
    つまりタスク自体は成功しているのだと思いますので、"最上位の特権で実行する"には意味はあったのだと思ってますが。

    実行ファイルをそのままダブルクリックで実行すると、結果が異常終了しており、管理者権限で実行すると正常終了するので、権限に関する問題だとは思うのですが、まだ詰め切れてません。

    ちなみに、タスクで実行したいexeファイルのプロパティで、互換性のところに"管理者としてこのプログラムをで実行する"にした場合、タスク自体が実行されませんでした(前回の実行結果の欄に、この操作には対話型のウィンドウステーションが必要ですと表示された、イベントログにはエラーなし)。

    キャンセル

  • 2016/04/05 13:50 編集

    前任者が作成したタスクの管理アカウントをbatchuser(標準ユーザー、グループ:Users)から、自分のアカウントDinKa(管理者、グループ:Administrators)に変更してみたら普通に実行できました。
    実際にもう一度、batchuserのアカウントのグループを、PowerUsersやAdministratorsに変更してみて、タスクを実行してみましたがやはり実行で異常終了になります。

    他にアカウント間の相違がある点があるとすれば、ドメイングループが違うぐらいでしょうか。うーん、難しいですね。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C#

    7394questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Windows

    1489questions

    Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

  • サーバ

    787questions

    サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

  • SQL Server

    602questions

    SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

  • バッチファイル

    228questions

    バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

  • トップ
  • C#に関する質問
  • バッチファイルをタスクスケジューラで起動時にイベントでのエラーが発生する原因の切り分けについて