2009-11-04 9 views
9

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

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

私の推測では、このプロセスはデスクトップ上で「デスクトップとの対話」フラグをサービスと同様に操作する必要があります。しかし、私は予定された仕事のために同様のものを見つけることができませんでした。ここで

が失敗しているコードです。(それは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);     
    } 

} 

答えて

8

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

this MSDN threadでH小川さんのアドバイスを受けてみましたが、うまくいっていたようです。それは奇妙なものですが、それを発見した小川さんに誇りを持っています。 「小川ハック」の

概要:あなたは64ビットを持っているかどうかに応じて...どちらか

C:\Windows\SysWOW64\config\systemprofile\Desktopとして、システムプロファイルのデスクトップフォルダを作成し、または

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

Windows。

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

[編集:修正されたリンクのURL]

+1

これは機能します!それは狂っている、私はあなたに感謝したことは決して見つけられませんでした。上記のリンクも正しくありません。http://social.msdn.microsoft.com/Forums/en-US/innovateonoffice/thread/b81a3c4e-62db-488b-af06-44421818ef – Kelly

+0

サーバー上のOfficeオートメーションを動かすユーザーアカウントのUACを無効にする必要があります。これが私の最終的な失敗でした。 –

+0

私は私のために働いていないソリューションに従った。私は私のために働いた 'Microsoft Excel Application'のdcom IDにいくつかの変更を加えました。アイデンティティを「このユーザー」に変更し、管理者アカウントの資格情報を提供しました。これは私のためにうまくいき、Sharepoint Webpartはそれがすべき方法で動作するようになった。 –

関連する問題