12

タスク スケジューラを介して Windows 2008 Server で実行している小さな .NET アプリがあります。このアプリケーションは、Excel ファイルを開き、csv として保存する必要があります。ワークブックを開こうとすると、タスクが失敗します。タスク スケジューラを使用せずに手動で実行すると、アプリは正常に動作します。

「最高の権限で実行する」に設定し、「ユーザーがログオンしているかどうかにかかわらず天気予報を実行する」にチェックを入れました。

私の推測では、このプロセスは、サービスの「デスクトップとの対話」フラグをチェックするのと同様に、デスクトップと対話する必要があるということです。しかし、スケジュールされたタスクについて同様のものを見つけることができませんでした。

失敗しているコードは次のとおりです (workbook.open 呼び出しで失敗します)。

public static void ConvertExcelToCsv(string source, string destination)
{
    if (File.Exists(destination)) File.Delete(destination);

    Application xl = new Application();

    try
    {
        Workbook workbook = xl.Workbooks.Open(source, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
        Worksheet ws = (Worksheet)workbook.Sheets[1];
        ws.SaveAs(destination, XlFileFormat.xlCSV, Type.Missing, Type.Missing, false, false, Type.Missing, Type.Missing, Type.Missing,true);

        Marshal.ReleaseComObject(ws);
    }
    finally
    {
        xl.DisplayAlerts = false;
        xl.Quit();

        Marshal.ReleaseComObject(xl);                
    }

}
4

2 に答える 2

11

Windows Server 2003 では正常に動作しますが、Windows Server 2008 で Windows サービスから Office を自動化する際に問題が発生しました。この問題は Open 呼び出しでも発生するため、同じ問題である可能性があります。

H Ogawa のこの MSDN スレッドのアドバイスに従ってみましたが、うまくいくようです。奇妙ですが、発見した小川さんに敬意を表します。

「Ogawa Hack」のまとめ: システム プロファイル用のデスクトップ フォルダを作成します。

C:\Windows\SysWOW64\config\systemprofile\Desktop、 また

C:\Windows\System32\config\systemprofile\Desktop

...64 ビット Windows を使用しているかどうかによって異なります。

また、フォルダには、Office を「操作」しているユーザーの書き込み権限が必要です。

[編集: リンク URL を修正]

于 2009-11-05T12:00:21.903 に答える