none
WindowsServer2008R2SESp1でのタスク実行について RRS feed

  • 質問

  • はじめて質問させて頂きます。

    これまでWindowsServer2003R2SESp1でタスク実行できていたVB6.0Sp6で作成したexeが動きません。

    VB6.0のexeの処理内容は、OracleにOO4Oで接続して取得したデータをエクセルに出力するというものです。

    Oracleの接続には問題なく、データ取得、エクセルの各オブジェクトの生成まではうまくいくのですが、いざ保存(Bookオブジェクト.SaveAs (パス))となると以下のようなエラーが出て終了してしまいます。(タスク実行時のみ)

    No= 1004
    Err.Description = アプリケーション定義またはオブジェクト定義のエラーです。

    サーバーにリモートログインしてexeを直に実行するとエクセルファイル作成までうまくいき問題なく終了するのですが、WindowsServer2008のタスク上で実行すると上記のエラーで終了してエクセルファイルは作成されずに終了してしまいます。

    環境

    VB6.0のexeは、サーバー上で動作するもので、Oracle、Oracleクライアント、VB6.0ランタイムとOffice2007エクセルをサーバー上にインストールしています。

    上記取得のエラー内容はVB6.0作成したexeにてOnErrorで取得したエラーをファイルに書き込む処理を作りこんで取得しています。エラー処理でオブジェクト解放を行っていて、例外終了後、エクセルのプロセスが残っていることはありません。また、VB6.0exe自体もログを出力して正常終了するようになっているのでタスクのログには正常終了と残ります。

    データを取得するOracleとVB6.0のexeは、同一サーバー上にあります。

    エクセルファイルの出力先とVB6.0のexeは、同一サーバー上にあります。

    上記の案件で検索したところいくつかの対応方法が出ていたのでこれらについては対応を試みましたが、依然解消されないままです。

    ①exeがフォームを表示しているのでタスク実行できない。

    作成したexeは、もともとクラスと標準モジュールで構成されているものでフォームやメッセージBOXの表示などは行っていません。また、ログインした状態でもタスクマスケジューラライブラリの一覧から右クリックで「実行する」を選択して実行した結果が上記のエラーになります。

    ②タスクのセキュリティオプションの設定

    以下のような対応を行っています。

    1.「ユーザーがログオンしているかどうかにかかわらず実行する」オプションボタンをON

    2.「最上位特権で実行する」チェックBOXをON

    3.「開始オプション」にexeの実行パスをセットする

    ③互換性の対応

    VB6.0で作成したexeなのでexeファイル自体(プロパティ)に以下のような互換性の設定を行いました。

    1.「互換モードでこのプログラムを実行する」のチェックBOXをON、表示されるコンボBOXにて「WindowsServer2003SP1」を選択。

    2.「管理者としてこのプログラムを実行」のチェックBOXをON、全てのユーザーに適用。

    ④DAOのDLLをレジストリ登録する。

    当初、「ActiveX コンポーネントはオブジェクトを作成できません。」というエラーが発生していたので検索したところDAOのDLLパスがレジストリに登録されていないとのことで、「ファイル名を指定して実行」で以下のコマンドを実行しました。これで「ActiveX コンポーネント~」というエラーから「アプリケーション定義~」というエラーに変わりました。
    regsvr32 "C:\Program Files (x86)\Common Files\microsoft shared\DAO\DAO360.DLL"

    ③コンパイル時の参照パスと異なる

    1.Dim xlApp As Excel.ApplicationをDim xlApp As Object とするとあったのでこのように修正して実行したところexe直実行でもエクセルが作成されなくなってしまい、今度はエラーにもならず無反応のままになってしまいました。

    どうかよろしくお願いいたします。


    • 編集済み 質問1 2012年11月19日 2:20
    2012年11月19日 2:15