6

COM オブジェクトを使用して、NT サービスの Excel スプレッドシートにアクセスします (Windows Scripting Host 経由)。Vista より前のバージョンでは問題なく機能していましたが、Vista 以降では次のエラーが表示されます。

Microsoft Office Excel はファイル 'c:\myfiles\test.xls' にアクセスできません。いくつかの理由が考えられます。

  • ファイル名またはパスが存在しません。
  • ファイルは別のプログラムによって使用されています。
  • 保存しようとしているブックは、現在開いているブックと同じ名前です。

NT サービスのログオン設定を変更して、自分のアカウント、管理者アカウント、およびローカル システムを使用しようとしました。ローカル セキュリティ ポリシーを調べましたが、何も見つかりませんでした。Microsoft KB を検索して何日も費やしましたが、役に立ちませんでした。

コンソール アプリケーションからスクリプトを実行すると、問題なく動作します。ファイルが開き、問題なく処理されます。エラーは、サービスのコンテキスト内から実行された場合にのみ発生します。

サービスが Windows XP または Server 2003 SP1 で実行されている場合も、問題なく動作します。失敗するのは Vista だけです (そして、Server 2003 SP2 で失敗したという報告を受けています)。

価値のあるコードは非常に単純です。

dim xl_app
Set xl_app = CreateObject("Excel.Application")
xl_app.Workbooks.Open mypath,0,1

この人が同じ問題を経験している可能性があると思います: http://bytes.com/forum/thread819740.html

4

2 に答える 2

1

さらにいくつかの質問:

  • どのバージョンの Excel を使用していますか?
  • 昇格された権限でサービスを実行しようとしましたか?
于 2008-11-24T18:30:02.793 に答える
0

私はこの問題を「一種」解決しました。"dcomcnfg" を使用して Excel アプリケーションを起動するアカウントをユーザー アカウントまたは "対話型ユーザー" に変更すると、サービスから起動された Excel はそのアカウントで起動し、ファイル システムにアクセスできるようになります。

問題は、これがグローバル設定であることです。使用する場合: * "このユーザー": Excel は常にそのユーザーで開き、Excel を対話的に使用する場合でも、常にセッション 0 で UI なしで開きます。IEは常に見えません。* 「インタラクティブ ユーザー」: Excel は常にインタラクティブ ユーザー アカウントで起動しますが、これは、起動時にインタラクティブ ユーザーなしで起動するサービスでは機能しないと思います。

これには何らかのセキュリティ設定が必要です。他の人が他のアイデアを持っていることを願っています。

于 2009-01-09T23:11:15.927 に答える