Dienst, der eine Excel-Tabelle befüllt

marac

Well-known member
ID: 272843
L
1 Februar 2007
2.061
321
Hallo Welt! :ugly:

In meinem konkreten Fall geht es zwar um ein VB6-Programm, aber ich denke mal, dass es kein VB6-spezifisches Problem ist, sondern eher mit der Betriebssystem-Konfiguration zu tun hat, deshalb hab ich das Präfix mal weggelassen...

Hat hier zufällig schon mal jemand einen Dienst geschrieben, der eine Excel-Tabelle mit Werten füllen soll?
Mein Code läuft:
a) unter Win2003SV als Dienst und
b) unter Win2008SV als EXE
aber leider nicht:
c) unter Win2008SV als Dienst (hier schlägt das Öffnen der Excel-Vorlage fehl).
Offenbar gibt es unter Win2008 irgendwelche neuen Sicherheitseinstellungen, die das Öffnen eines Excelsheets von einem Dienst aus verhindern.

Hat jemand eine Idee, wo man da schrauben kann?
 
Als Dienst läuft der Prozess normal als SYSTEM-User. Guck mal, ob dieser effektive Berechtigungen für die benötigte Datei hat.
 
Ich kann ja im Dienst-Kontroll-Manager einstellen, unter welchem Benutzer der jeweilige Dienst laufen soll, da habe ich schon verschiedene probiert, unter anderem auch den, unter dem ich selbst angemeldet bin, und unter dem es als EXE ausgeführt ja auch funktioniert. Die Berechtigungen für die Datei sollten also nicht das Problem sein...
 
Du musst erstmal rausfinden, wo es schief läuft. Also den Code am besten mit Print#-Anweisungen spicken, die jeden Rückgabewert von WinAPI-Aufrufen aufzeichnen und dann gucken, wo es hängt.

Danach sollte es ein Leichtes sein, den Grund dafür zu finden und zu beheben.
 
Wo es schief läuft, weiß ich schon, direkt beim Öffnen der Datei...


' Excel Instanz erstellen
Set oXlsApp = New Excel.Application

oXlsApp.Interactive = False
oXlsApp.DisplayAlerts = False
oXlsApp.Visible = False


' bis hier rennt es brav (den Logfile-Eintrag, den ich an dieser Stelle absetze, bekomme ich noch)

Set oWB = oXlsApp.Workbooks.Open(szTmpFilename, False, False)

' hier komme ich nicht mehr vorbei, sondern das Programm rennt in meinen ErrorHandler...


Fehler # 1004: Die Methode '~' für das Objekt '~' ist fehlgeschlagen

(Die Tilden stehen da wirklich drin...)
 
Also laut Google kann der 1004 weger jedem Scheiß auftreten :-?
Einige haben ihn z. B. bekommen, weil Variablen nicht korrekt deklariert waren. oXlsApp und oWB korrekt deklariert?

Andere Idee: szTmpFilename korrekt? Nicht, dass das ein relativer Pfad is, der - wenn als Dienst ausgeführt wird - nicht gültig is.

Schon mal probiert, Excel sichtbar laufen zu lassen, ob du irgendwelche Fehler kriegst, die auch was aussagen?
 
Dass der 1004 nichts aussagt, hab ich auch schon festgestellt, das ist ja das Problem :ugly:

szTmpFilename ist korrekt (hab ihn auch schon fix auf c:\temp.xls gehängt, oder auf eine Excel-Datei im ApplicationPath - hilft alles nicht)

Ich hab jetzt mal spaßeshalber die Excel-Applikation sichtbar gelassen und direkt vor dem Öffnen des Workbooks eine MsgBox eingefügt. Das Ganze dann als Lokales Systemkonto mit Interaktion mit dem Desktop als Dienst gestartet.
Jetzt bekomme ich auf meinem 2008er-Server ein PopUp "Interactive services dialog detection" "A program can't display a message on your desktop" und habe dort die Möglichkeit "Show me the message" zu drücken. Das öffnet mir einen anderen Desktop, auf dem ich nun ein laufendes Excel und meine Messagebox sehe.

In diesem Excel kann ich jetzt eine neue Tabelle erstellen, in diese Daten eingeben, formatieren, wie ich lustig bin. Aber: Ich kann keine Datei öffnen und ich kann keine Datei speichern (ich bekomme einfach jeweils keinen FileBrowser).

Was witzigerweise aber geht, ist, ein File->New->From existing Workbook
Da kann ich dann auch schön durch das gesamte Dateisystem browsen...

Klicke ich meine Messagebox dann weg, versucht mein Dienst, die Vorlagendatei zu öffnen, und das Excel schmiert ab. (das "Interactive services dialog detection"-Fenster sagt "The program no longer requires attention").