Schrift
[thread]629[/thread]

Win32-OLE mit Apache

Leser: 1


<< >> 7 Einträge, 1 Seite
Giraph
 2005-12-18 23:55
#6329 #6329
User since
2005-12-18
3 Artikel
BenutzerIn
[default_avatar]
HI,
ich spreche mittels Win32-OLE Modul Excel an, um eine XLS-Datei mit Daten zu füttern und diese dann auszudrucken.

Ich benutze seit einiger Zeit OmniHTTPd und das Perlskript funktionierte einwandfrei. Jedoch möchte ich jetzt auf Apache wechseln, dann funktioniert aber die Ansteuerung nur teilweise.

Problem:
Das lesen/schreiben von ActivePrinter-Eigenschaft scheint Apache zu blockieren sowie bei $excel->{Visible} = 1; öffnet sich Excel nicht. Die übrigen Funktionen auf das Excelsheet funktionieren.

Offenbar verbietet Apache gewisse Funktionen welche das Programm (Excel) ansprechen und erlaubt nur die Zugriffe auf die XLS-Datei selbst.

Welche Einstellung muss ich bei Apache vornehmen um dies zu ermöglichen?

PS: Apache läuft unter Win2000
renee
 2005-12-19 01:12
#6330 #6330
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Kannst Du mal etwas Code zeigen?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Giraph
 2005-12-19 22:27
#6331 #6331
User since
2005-12-18
3 Artikel
BenutzerIn
[default_avatar]
Ja, momentan teste ich es in etwa so:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# Excel öffnen
use Win32::OLE;
$Win32::OLE::Warn = 3;
my $excel = Win32::OLE->new('Excel.Application') || die "Kann Excel nicht starten";
$excel->{Visible} = 1;

# Mappe öffnen
my $book = $excel->Workbooks->Open("datei.xls");

$excel->Application->{ActivePrinter} = 'hp deskjet 5550 series auf Ne00:';
$book->Sheets("Tabelle1")->PrintOut;

# HTML-Ausgabe
print ("Content-type: text/html\n\n");
print qq~
<html>
<head>
<title>Seite wird gedruckt...</title>
</head>
<body>
Seite wird gedruckt...
</body>
</html>~;

# Excel beenden
$book->Save();
$book->Close();


Beim starten in der Kommandozeile gehts prima. Excel öffnet sich, druckt aus und schliesst sich wieder. Beim Starten als CGI via Apache, gibt es einen 500er.

error.log:
Code: (dl )
1
2
3
4
5
6
7
8
[Mon Dec 19 21:13:33 2005] [error] [client 127.0.0.1] Premature end of script headers: test.cgi, referer: http://localhost/
[Mon Dec 19 21:13:33 2005] [error] [client 127.0.0.1] OLE exception from "Microsoft Excel":\r, referer: http://localhost/
[Mon Dec 19 21:13:33 2005] [error] [client 127.0.0.1] \r, referer: http://localhost/
[Mon Dec 19 21:13:33 2005] [error] [client 127.0.0.1] Die ActivePrinter-Eigenschaft des Application-Objektes kann nicht festgelegt\r, referer: http://localhost/
[Mon Dec 19 21:13:33 2005] [error] [client 127.0.0.1] werden.\r, referer: http://localhost/
[Mon Dec 19 21:13:33 2005] [error] [client 127.0.0.1] \r, referer: http://localhost/
[Mon Dec 19 21:13:33 2005] [error] [client 127.0.0.1] Win32::OLE(0.1702) error 0x80020009: "Ausnahmefehler aufgetreten"\r, referer: http://localhost/webs/dvdstar/skripte_entwicklung/lokaldruck/
[Mon Dec 19 21:13:33 2005] [error] [client 127.0.0.1]     in PROPERTYPUT "ActivePrinter" at D:/httpd/HtDocs/test.cgi line 15\r, referer: http://localhost/


Ich interpretiere dies so, dass Apache den vollen Zugriff auf Excel verweigert?! Ich bin ratlos...
esskar
 2005-12-20 00:44
#6332 #6332
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
anders.
ich nehme an, dein apache läuft als service - also als system user. dieser user kennt deinen printer wohl nicht.
steffenw
 2005-12-20 14:44
#6333 #6333
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Apache unter Win und neue Prozesse starten, das habe ich auch mal nicht mit Win32::Process hinbekommen. Ich denke, der Apache erlaubt es nicht, ist etwas restrict in seinem Sicherheitsdenken. Ich denke das Problem ist schon
new('Excel.Application')
, also ein neuer Process.
Ich habe das mit meinem Process starten auf einem Sambar-Webserver hervorragend gekonnt, nur eben mit dem Apache nicht. Was auch nicht ging. Ich konnte dem Apache nicht sagen, daß die Perl-Installation in einem Netzlaufwerk liegt, er akzeptierte nur lokale Laufwerke. Indianer sind eben sehr konserativ.

Aber ich habe das mit dem Process starten natürlich hinbekommen, auch mit Apache. Ich hatte dann eben parallel einen Dienst laufen, den die Web-Spplikation über Socket mit Parametern ansprechen konnte. Dieser hat dann Processe gestartet und eben die Arbeit im Hintergrund abgewickelt. Sicher war das dann auch, weil man eben nur das machen konnte, was auch vorgesehen war.
$SIG{USER} = sub {love 'Perl' or die};
Giraph
 2005-12-21 01:29
#6334 #6334
User since
2005-12-18
3 Artikel
BenutzerIn
[default_avatar]
Leute, vielen Dank. Ich habs nun geschafft. Also wie esskar vermutet hat, läuft der Apache als Service und das System kannte den Drucker nicht. Anmelden als lokales Systemkonto war aktiviert. Nun lasse ich den Apache unter meinem Profil anmelden, wo ich auch den Drucker installiert habe. Jetzt kann ich mal wieder sagen, ist ja logisch ;-)

Ich werde mich noch etwas in Dokus rumwühlen und noch ein paar tests machen...

Gruss Giraph
esskar
 2005-12-21 04:37
#6335 #6335
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ja, ja, windows.
das unsichere OS :)
<< >> 7 Einträge, 1 Seite



View all threads created 2005-12-18 23:55.