Schrift
[thread]410[/thread]

Notepad öffnet sich nicht vom Browser aus: Von der Konsole klappts



<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten
juergen
 2005-01-20 15:31
#4145 #4145
User since
2005-01-18
11 Artikel
BenutzerIn
[default_avatar]
Hallo Leute.

Das Thema wurde schon oft angesprochen, doch eine Lösung habe ich noch nicht gefunden. Also, liebe Perl-Experten, gebt euer bestes!!

Das Problem ist folgendes: An einer bestimmten Stelle meines Perl-Skripts soll eine existierende Datei im Notepad geöffnet werden. Ohne auf Notepad zu warten, soll das Programm weiterlaufen, und eine HTML-Seite z.B. mit einer Erfolgsmeldung ausgeben. Mit folgendem Befehl klappt es auf der Konsole ohne Probleme:

Code: (dl )
system "start notepad $datei";


Das Perl-Skript läuft aber normalerweise im Browser. Dort funktioniert es dann nicht mehr. Leider bleibt das Programm an dieser Stelle stehen, wenn es im Browser aufrufe!!!

Gibt's dafür eine Lösung? Ich weiß dass es mit anderen Programmiersprachen geht, z.B. mit Java. Das möchte ich mir aber nicht antun.

Betriebssystem: Windows2000 oder WindowsXP (geht beides nicht)
Server: Apache

Vielen Dank für jede Hilfe.
Jürgen
Rambo
 2005-01-20 17:19
#4146 #4146
User since
2003-08-14
803 Artikel
BenutzerIn

user image
aus dem IE kann man notepad so aufrufen
file:///%windir%/notepad.exe
evtl. bau das mal ins script ein?
ist nur ein versuch
GwenDragon
 2005-01-20 17:52
#4147 #4147
User since
2005-01-17
14548 Artikel
Admin1
[Homepage]
user image
Wie sind denn die Pfade gesetzt?
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

GwenDragon
 2005-01-20 18:07
#4148 #4148
User since
2005-01-17
14548 Artikel
Admin1
[Homepage]
user image
Es kann sein, dass der fork()-Prozess nicht unter Apache und Windows klappt. Oder kein Rückgabewert kommt. Oder STDOUT und STDIN sonstwie verbogen werden.

Wer weiß, ob sich die Windowsshell CMD.exe richtig verhält?\n\n

<!--EDIT|GwenDragon|1106238011-->
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

Ronnie
 2005-01-20 18:07
#4149 #4149
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Hmm, ohne kleinlich sein zu wollen, aber es ist schon klar das das notepad versucht wird auf dem Server zu öffnen und nicht auf dem Client, oder?! Wenn das die selbe Maschine ist, ist es egal aber bei getrennten Boxen macht das schon einen Unterschied. Ganz schlecht ist es wenn die Server-Box ein Linux-Server ist.
GwenDragon
 2005-01-20 18:24
#4150 #4150
User since
2005-01-17
14548 Artikel
Admin1
[Homepage]
user image
[quote=Ronnie,20.01.2005, 17:07]Hmm, ohne kleinlich sein zu wollen, aber es ist schon klar das das notepad versucht wird auf dem Server zu öffnen und nicht auf dem Client, oder?![/quote]
Das versteht sich von selbst, oder ;)

Der Server ruft über die im System eingestellte Shell (wohl CMD.exe) notepad.exe mit Argumenten auf. Das geschieht per fork() und wartet bis das Kind beendet ist. Und das kann dauern.

Ich würde, wenn ich schon auf dem Windows-Rechner sowas anwenden muss, die Win32::*** Module benutzen.
Folgendes als Beispiel aus der perldoc:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
use Win32::Process;
use Win32;

sub ErrorReport{
       print Win32::FormatMessage( Win32::GetLastError() );
}

Win32::Process::Create($ProcessObj,
                               "C:\\winnt\\system32\\notepad.exe",
                               "notepad temp.txt",
                               0,
                               NORMAL_PRIORITY_CLASS,
                               ".")|| die ErrorReport();

$ProcessObj->Suspend();
$ProcessObj->Resume();
$ProcessObj->Wait(INFINITE);
\n\n

<!--EDIT|GwenDragon|1106239008-->
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

Ronnie
 2005-01-20 18:33
#4151 #4151
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=GwenDragon,20.01.2005, 17:24]Das versteht sich von selbst, oder ;)[/quote]
Ja an sich schon, aber die Support-Erfahrung lehrt mich das es nichts gibt was man nicht nochmal hinterfragen sollte, erscheint es auch noch so trivial und logisch.
GwenDragon
 2005-01-20 18:41
#4152 #4152
User since
2005-01-17
14548 Artikel
Admin1
[Homepage]
user image
[quote=juergen,20.01.2005, 14:31]Das Problem ist folgendes: An einer bestimmten Stelle meines Perl-Skripts soll eine existierende Datei im Notepad geöffnet werden. Ohne auf Notepad zu warten, soll das Programm weiterlaufen, und eine HTML-Seite z.B. mit einer Erfolgsmeldung ausgeben.[/quote]
Ohne zu warten geht nicht! Es sei denn es wird über eine Pipe geschrieben. Ob das aber mit dem Notepad klappt?
Es setzt eine Prozesskommunikation zwischen Skript und Notepad voraus.

Das geht wohl nur mit den Win32::*** Modulen!

Windows ist NICHT Unix. Deswegen klappt manches nicht so wie Perl es vorsieht.
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

Strat
 2005-01-20 20:34
#4153 #4153
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
ich vermute mal, dass es gehen muesste, wenn fuer den Dienst Apache die Option "Datenaustausch zwischen Dienst und Desktop zulassen" gesetzt ist (geht ueber Verwaltung -> Dienste -> Eigenschaften von Apache -> Anmelden)

falls nicht und du es umbedingt benoetigst, kannst du das programm entweder so starten, wie du es auf einem remote-pc starten wuerdest, oder du baust den webserver in dein script ein (z.B HTTP::Daemon)\n\n

<!--EDIT|Strat|1106246180-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Strat
 2005-01-20 20:38
#4154 #4154
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
ein script kann man unter windows z.B. folgendermaszen starten
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
#! /usr/bin/perl
use warnings;
use strict;
use Win32::OLE;
use Win32::OLE::Variant;

my $server = shift(@ARGV) || '.';
$server =~ s|^[\\/]+||;

my $class = "WinMgmts:{impersonationLevel=impersonate}!//$server";
my $wmi = Win32::OLE->GetObject($class) or
die "Error: Couldn't connect to \\\\$server: " . Win32::OLE->LastError();

# get a Win32_Process class object
my $process = $wmi->Get("Win32_Process") or
die "Error: couldn't get the process list: " . Win32::OLE->LastError();

# create a BYREF variant so a COM object can modify its value and return it
my $pid = Variant(VT_I4 | VT_BYREF, 0);
if (0 == $process->Create(join(" ", @ARGV), undef, undef, $pid)) {
print "Process created with PID $pid\n";
} # if
else {
print "Error: couldn't create process.\n";
}
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten



View all threads created 2005-01-20 15:31.