Schrift
[thread]410[/thread]

Notepad öffnet sich nicht vom Browser aus: Von der Konsole klappts (Seite 2)



<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten
juergen
 2005-01-21 09:27
#4155 #4155
User since
2005-01-18
11 Artikel
BenutzerIn
[default_avatar]
Danke für die vielen Antworten bisher.

@Strat: Dein 1. Tipp (Datenaustausch zwischen Dienst und Desktop zulassen) bringt mich einen großen Schritt weiter. Jetzt geht mit dem Befehl 'system "start notepad $datei";' zumindest schon mal mein Notepad auf. Das war vorher nicht der Fall. Allerdings wartet der Browser jetzt immer noch, bis Notepad geschlossen wird, bevor er das Perl-Skript weiter abarbeitet. Ich werd mich dann wohl noch mal mit den Win32-Modulen beschäftigen müssen.

Was meinst du mit "wie auf einem remote-pc starten"? Und was genau passiert, wenn ich meinen Webserver in das Skript einbaue? Wenn ich nur wüßt wie? Soll dein 2. Beitrag dazu eine Anleitung sein? Wo muss ich denn da meinen Notepad-Aufruf einbauen?

@Rambo: Versuch fehlgeschlagen :(

@Ronnie: Die Nachfrage war schon richtig, aber Server und Client sind in dem Fall dieselbe Maschine

@GwenDragon: Mit den Win32-Modulen habe ich auch schon herum experimentiert. Muss ich wie gesagt noch mal ran. Mein momentaner Stand ist (wenn ich nicht "system ...", sondern "Win32::Process::Create" benutze), dass der Browser das Notepad zwar aufmacht und an der Stelle auch nicht hängen bleibt. Allerdings bricht das Perl-Skript an der Stelle an und arbeitet keine weiteren Befehle ab. Das heißt die Seite mit der Erfolgsmeldung kommt auch nicht. Ich weiss nicht, was besser ist. Ich probier noch ein bisschenrum. Mehr vielleicht heute (spät) abend.

Jürgen
esskar
 2005-01-21 19:32
#4156 #4156
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
das liegt wohl an dem start...
versuch mal

Code: (dl )
system qq~cmd /c "notepad $datei"~;
Strat
 2005-01-21 19:39
#4157 #4157
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
@juergen: mit "wie auf einem remote-pc starten" meinte ich, dass man in windows-netzwerken auch - genuegend rechte vorausgesetzt - programme uebers netzwerk starten kann; das codebeispiel, das ich geliefert habe, macht genau sowas.

Wenn system blockiert, bis notepad beendet ist, dann starte notepad doch mit Win32::Process... da ist in der doku dazu sogar ein schoenes notepad-beispiel...

webserver ins eigene programm einbauen: hast du dir die doku von HTTP::Daemon mal angeschaut? wenn du ein praktisches beispiel sehen willst, dann lade dir mal von meiner HP -> Perl -> Downloads -> Strat's Chatwebserver runter, den habe ich mit HTTP::Daemon gecoded...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
juergen
 2005-01-22 01:13
#4158 #4158
User since
2005-01-18
11 Artikel
BenutzerIn
[default_avatar]
Problem gelöst!! :)

Danke an Strat für den goldenen Tipp, dass in den Apache-Eigenschaften der Datenaustausch zwischen Dienst und Desktop zugelassen werden muss. Siehe Beitrag vom 20.01.2005, 19:34.

Meine letzte Vermutung, dass das Skript nach Aufruf von Win32::Process::Create abbricht, hat sich als nicht richtig erwiesen. Hier das funktionierende (Minimal-)Beispiel, läuft unter WinXP:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!perl

use Win32::Process;

$datei = "D:/tmp.txt";

Win32::Process::Create($ProcessObj,
                       "C:/windows/notepad.exe",
                       "notepad $datei",
                       0,
                       DETACHED_PROCESS,
                       ".") || die ErrorReport();

print "content-type: text/html\n\n";
print "<html><head></head><body>";
print "Notepad wurde gestartet. Process-ID: " . $ProcessObj->GetProcessID();
print "</body></html>";

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

exit;


Danke an alle!!!
esskar
 2005-01-22 01:23
#4159 #4159
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
hast du mal cmd /c probiert?
juergen
 2005-01-22 01:59
#4160 #4160
User since
2005-01-18
11 Artikel
BenutzerIn
[default_avatar]
Ja habe ich. Da passiert das gleiche wie bei "system start notepad;". Von der Konsole klappts, über den Browser bleibt das Skript an der Stelle hängen und läuft erst weiter, wenn ich Notepad wieder schließe.\n\n

<!--EDIT|juergen|1106352064-->
esskar
 2005-01-22 02:21
#4161 #4161
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
finde das verhalten schon merkwürdig...
aber was soll man machen... gute lösung übrigens...
gute nacht!

Code: (dl )
1
2
3
4
5
6
Win32::Process::Create($ProcessObj,
"",
"notepad \"$datei\"",
0,
DETACHED_PROCESS,
".") || die ErrorReport();

reicht aber völlig
juergen
 2005-01-22 02:56
#4162 #4162
User since
2005-01-18
11 Artikel
BenutzerIn
[default_avatar]
Wenn ich so wie du die 2. Zeile leer lasse, bekomme ich die Fehlermeldung: "Das System kann den angegebenen Pfad nicht finden."

Aber der Hinweis mit den Anführungszeichen um $datei ist sehr gut. Wenn die Datei z.B. Leerzeichen enthält, geht es nur so.

Ein Nachtrag noch zu meinem Code-Beispiel von oben: Der HTTP-Header sollte gesendet sein, bevor der Win32-Prozess gestartet wird, sonst gibt's im Fehlerfall nicht die richtige Fehlermeldung, sondern nur einen Fehler 500.
esskar
 2005-01-22 03:43
#4163 #4163
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
und so?

Code: (dl )
1
2
3
4
5
6
Win32::Process::Create($ProcessObj,
"",
qq~$ENV{SystemRoot}/notepad.exe "$datei"~,
0,
DETACHED_PROCESS,
".") || die ErrorReport();


jetzt find ichs schön :)
Strat
 2005-01-22 10:59
#4164 #4164
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
kann Win32::Process wirklich was mit / in Pfadangaben anfangen? meines wissens nach nicht, also musst du
Code: (dl )
qq~$ENV{SystemRoot}\\notepad.exe "$datei"~,

schreiben\n\n

<!--EDIT|Strat|1106384410-->
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.