Eigene Firefox-Erweiterung: *.bat-Datei erstellen und anschließend sofort ausführen

15/04/2014 - 20:50 von Stephan Gerlach | Report spam
Folgender (Test-)Code ist in einer von mir erstellten
Firefox-Erweiterung enthalten:


function Test() {
var datei = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);

datei.initWithPath("C:\\test.bat");

// TEXT IN TEST.BAT SCHREIBEN
var text = "DIR";
var outputStream =
Components.classes["@mozilla.org/network/file-output-stream;1"]

.createInstance(Components.interfaces.nsIFileOutputStream);
outputStream.init(datei, 0x04 | 0x08 | 0x10, 00002, 0);
outputStream.write(text, text.length);

}

function execute() {
Test();
sleep(500);
progstart('C:\\test.bat');
}


Hierbei ist sleep() eine "selbstgemachte" Funktion, die einfach 500
Millisekunden abwartet. progstart() ist eine Funktion, die C:\test.bat
starten soll. sleep() und progstart() funktionieren prinzipiell und sind
IMO nicht das Problem.

Das Problem ist folgendes:
Ich starte die Erweiterung vom Firefox aus. Dadurch wird die Funktion
execute() aufgerufen. Durch die darin enthaltene Funktion Test() wird
eine ausführbare Datei test.bat erstellt mit dem Inhalt DIR (als
Text-String). Zur Sicherheit werden danach 500 ms abgewartet, damit
test.bat "in Ruhe" erstellt werden kann. Danach soll mit progstart()
diese Datei test.bat ausgeführt werden. Das klappt aber nicht (immer),
da sich Firefox hier sporadisch über eine Zugriffsverletzung über die
Datei fire.bat beschwert, obwohl die Datei fire.bat schon vorhanden ist
- ich kann sie bereits mit Notepad öffnen. Erst, wenn ich wesentlich
lànger als 500 ms warte (z.B. 12000 ms), wird fire.bat zuverlàssig
gestartet. 12000 ms ist aber recht lang.

Frage: Könnte dieses Zugriffsproblem mit folgendem Code-Teil zu tun haben?

outputStream.init(datei, 0x04 | 0x08 | 0x10, 00002, 0);
outputStream.write(text, text.length)

In der Funktion init werden irgendwelche Flags gesetzt, siehe hier
<https://developer.mozilla.org/en-US...Stream>
und hier <https://developer.mozilla.org/en-US...eters>.
Ich werde aber nicht ganz schlau draus, wie ich die setzen muß, daß ich
test.bat bereits ausführen kann, obwohl Firefox noch drauf zugreift.
Oder sollte ich das Schreiben in die test.bat grundsàtzlich àndern?



Eigentlich sollte Brain 1.0 laufen.


gut, dann werde ich mir das morgen mal besorgen...
(...Dialog aus m.p.d.g.w.a.)
 

Lesen sie die antworten

#1 Uwe Schröder
17/04/2014 - 02:17 | Warnen spam
On 15.04.2014 20:50, Stephan Gerlach wrote:

outputStream.write(text, text.length);
}



Solltest du die Datei nicht an der Stelle auch wieder schließen? Sonst
passiert das vermutlich erst irgendwann bei der nàchsten Garbage
Collection, wenn das obsolete outputStream-Objekt abgeràumt wird.

Nur mal ein Schuß ins Blaue.


usch


news://freenews.netfront.net/ - complaints:

Ähnliche fragen