Programm für usb stick

hi
ich suche ein programm, oder eine möglichkeit um vom usbstick gestartete programme beenden zulassen, sobald dieser gezogen wird.
ein beispiel wie es aussehen sollte ist die suit von portableapps.com, denn diese beendet sich beim ziehen des sticks.
es wäre toll, wenn dieses programm automatisch beim einstecken startet und sich und alle programme vom stick beendet wenn dieser gezogen wird.
hoffe dass es da eine mögliche umsetzung gibt.

gruß Chaos-Genie

Hallo

Normalerweise sollten Programme automatisch beendet werden, da sie ja hardwaremäßig nicht mehr bernunden sind. Ausser die programme wurden schon komplett in den Hauptspeicher geladen.
Zum Automatischen Starten könnten dir autorun.inf Dateien helfen:
http://dailycupoftech.com/usb-drive-autoruninf-tweak…
Ich hoffe mal du kannst englisch :wink:

MfG
hahihu

Normalerweise sollten Programme automatisch beendet werden, da
sie ja hardwaremäßig nicht mehr bernunden sind. Ausser die
programme wurden schon komplett in den Hauptspeicher geladen.

Hallo Hahihu,

ich ging davon aus daß eine exe oder com die ich starte in den Arbeitsspeicher geladen wird und dort dann die Befehle in ihr abgearbeitet werden.
Warum sollte diese Abarbeitung automatisch beendet werden wenn ich da einen Stick rausziehe, das ist doch der Abarbeitung genauso egal wei wenn ich einen Drucker über USB anschließe?
Außer im Code steht, den/die USB-Ports per Timer laufend überwachen…

Wenn überhaupt geht das doch m.E. nur so daß man in Win das „rauszieh“-Ereignis auswertet/registriert, daraufhin alle Prozesse die Programme von dem Stick bedeuten „abschießt“.

Ähem, das ist keine Korrektur deiner Aussage :smile: Ich hab davon keine Ahnung stelle mir das aber so vor, deshalb ist das eine Nachfrage wie das eigentlich so abläuft mit Programmen um zu lernen.

Gruß
Reinhard

Hallo,
das abfangen des WM_DEVICECHANGE Events sollte dein Problem loesen.

schau mal da:
http://msdn.microsoft.com/en-us/library/aa363480%28V…

Tschau
Peter

hi
danke für den tipp
hab da nur n paar fragen noch

kann ich also in eine autorun auch reinschreiben, dass es das gestartete beenden soll, wenn stick gezocken wird??
also autorun sieht so aus
[autorun]
open=Portable\USB-Stick-Starter.exe
icon=Portable\USB-Stick-Starter.exe,0
action=Portable\USB-Stick-Starter.exe

wo und wie müsste ich , falls es geht, einfügen !?!?!?

danke im vorraus

gruß Chaos-Genie

hi peter

ich habe leider noch folgendes problem

ich hab eig keine wirkliche ahnung von programmieren , und wie könnte ich das am besten umsetzen. ich habe eine veränderbare autorun.ini, und ein fertiges programm. aber am programm kann ich nich rumschrauben, da ich dazu kein wissen habe ^^
ich hoffe dass es trotzdem eine mögliche lösung gibt

gruß Chaos-Genie

Hallo

ich ging davon aus daß eine exe oder com die ich starte in den
Arbeitsspeicher geladen wird und dort dann die Befehle in ihr
abgearbeitet werden.

Wird es normalerweise auch, da hast du volkommen recht :wink:

Warum sollte diese Abarbeitung automatisch beendet werden wenn
ich da einen Stick rausziehe, das ist doch der Abarbeitung
genauso egal wei wenn ich einen Drucker über USB anschließe?

Es kann sein, dass ein Programm auf einem USB-stick ressourcen hat, die nicht in der exe integriert sind. Wenn es sich z.B. um Bilddateien handelt, die zur Luafzeit eingebunden werden, dann kann es sein, dass das Programm beim Nichtfinden dieser Datei eine Exception/Interrupt/schießmichtot:wink: auslöst, die dann für die Terminierung des Programmes sorgt, außer halt es braucht diese Dateien nicht, oder die Dateien wurden bereits beim Starten des Programmes in den Speicher geladen. Genauso mit DLLs. Normalerweise werden benötigte DLLs eines Programmes direkt in den Speicher geladen, weil sie dem Linker bei der Compilierung so übergeben worden sind. Es kann aber auch sein, dass das Programm eine DLL benutzt, erst wenn z.B. ein Button geklickt wird, siehe C# und [DLLImport]. Und wenn dann diese DLL z.B. fehlt, kann es zu einem Absturz kommen. Sehr kleine Programme haben ressourcen natürlich schon innerhalb der exe integriert.
Abgesehen davon könnte ich mir vorstellen, dass bei SEHR großen Programmen windows nur das Programm teilweise in den Speicher lädt, um Überlastungen zu vermeiden. Über die letzte Aussage kann ich aber nur spekulieren :wink:

Außer im Code steht, den/die USB-Ports per Timer laufend
überwachen…

Das sowieso. Siehe iTunes und iPods.

Wenn überhaupt geht das doch m.E. nur so daß man in Win das
„rauszieh“-Ereignis auswertet/registriert, daraufhin alle
Prozesse die Programme von dem Stick bedeuten „abschießt“.

Soweit ich weiß überwachen die Windowstreiber (im Kernel glaub ich sogar) die Hardwareinterfaces laufend. Wenn etwas verändert wird, wird eine Message/event im klassischen Sinne wie OnMouseClick zum Programm gesendent. Hier müsst ich aber nochmal nachschlagen, denn es kann sein, dass sich die Systeme mittlerweile erändert haben :wink:

Ähem, das ist keine Korrektur deiner Aussage :smile: Ich hab davon
keine Ahnung stelle mir das aber so vor, deshalb ist das eine
Nachfrage wie das eigentlich so abläuft mit Programmen um zu
lernen.

Wer nicht fragt bleibt dumm :wink: Also ich finde, dass das eine sehr gute Eigenschaft ist die du behalten solltest. Und wenn leute sagen dass du zu viel fragst, ignorier sie. glaub mir, ich hab erfahrung damit :stuck_out_tongue:

Obwohl es ein bisschen ist meine Antwort, hoff ich mal immernoch dass du das hier liest.

mfg
hahihu

Hallo

Meines wissens nach geht das Autorun leider nicht. Aber es könnte dennoch sein :wink:
Du kannst dir ja mit einem Trick behelfen:
Du schreibst eine Batchdatei, die als autostart gestartet wird. Diese startet wiederum deas Programm, was du eigentlich gestartet haben willst. Abgesehen davon kopiert und löscht die batchdatei ständig etwas auf dem usb-stick und lenkt sich so ab. als „letzten befehl“ sozusagen wäre dann das killen des prozesses des eigentlichen Programmes. Ich bin mir aber grad nich so sicher ob das nur mit bash oder auch mit batch geht :wink:

mfg
hahihu

hi, könntest du so nett sein und dazu ein beispiel formulieren??
ich hab bisher nur folgendes
prozess starte und wieder beenden, aber leider kann ich das beenden noch nich wirklich hinauszögern, bzw abhängig machen , ob usb stick steckt oder wech is. ich hab da leider keine ahnung von.

bidde einfahc mal n muster posten, werd mich dann weiter kämpfen und bei fragen wieder an dich wenden

gruß Chaos-Genie

hi
kannst du mir bei einer übersetzung helfen. in vba könnt ich es formulieren, aber eben nicht in batch. ich formulier es mal etwas gemischt, da ich ja das ein oder andere in batch ausdrücken kann

sprungpunkt 'erklärt sich von selbst (wäre schon batch)

a=devicestatus 'a nimmt wert von DBT_DEVICEREMOVECOMPLETE, was sagt, dass stick enfernt wurde (is zwar vba aber keine ahnung wie ich den wert bekomme, kannst ja deine copy and paste variante schildern, als alternative)
if a=true 'Unerscheidung für den Fall das a true annimmt(is vba, keine ahnung wie dass in batch geht ): )
taskkill /F /IM prozess.exe /T 'befehl zum beenden des prozesses(das wäre wieder batch)
exit /B 'beenden der batch datei(das wäre wieder batch)
else 'für den fall dass a nicht true ist(vbacode)
goto :sprungpunkt 'gehen zur sprungmarke(das wäre wieder batch)

gruß Chaos-Genie

ps, wie kann ich eig die batch unsichtbar im hintergrund dann ablaufen lassen ??!!!???

Hallo
also ich muss zugeben, dass dein Post mich grade vrerwirrt hat :wink:
Tut mir leid, BASIC ist leider soziemlich der einzige Dialekt, den ich nicht kann. Aber ich könnte dir mit einem Programm in C#.NET aushelfen, das genau dasselbe macht, was du willst: Programm starten, gucken ob device noch angeschlossen ist und prozesse killen. Mit dem genauen Code könnt ich dir aushelfen, wenn du magst, aber der grobe algorythmus sollte so aussehen:
-Mit Autorun das C# programm starten.
Jetzt der algorythmus für programm:
-Das gewünschte programm starten (System.Diagnostics.Process.Start():wink:
-Den Pfad zur anwendung raufinden (z.B. I:\ordner\csharp.exe)
-Den Laufwerksbuchstaben mit stringbuchstaben isolieren.
-while-schleife einrichten, die überrüfut, ob das Laufwerk mit dem isolierten Buchstaben immernoch eingesteckt ist
-Wenn nein, dann Process.Kill(); o.ä. Es soollte keine Probleme mit Adminrechten und so geben, da der gestartete Prozess ja sozusagen der ‚Child-process‘ und dein C#Programm der Parentprocess ist. Also volle kontrolle :wink:
-return 0; Damit das C# Programm selber beenden.
mfg
hahihu

hi
das hört sich echt gut an,
wäre nett wenn du mir das in C#.net schreiben könntest,
dumme frage, aber um das dann auszuführen brauch ich nich n extra prog, kann doch microsoft ab w2k ?!?

und was für n prog bräuchte ich dann , um so was in c#.net zu schreiben???
hab leider nur bisher vba in der schule gehabt:smiley:

und läuft dass dann versteckt im hintergrund ab?? wäre super

gruß Chaos-Genie

Hallo CG,

wäre nett wenn du mir das in C#.net schreiben könntest,
dumme frage, aber um das dann auszuführen brauch ich nich n
extra prog, kann doch microsoft ab w2k ?!?

nein, ich kenne zwar C# nicht, aber wenn es eine exe kompilieren=erstellen kann läuft die grundsätzlich auch auf allen Win-Versionen.
Außer es werden Befehle benutzt die nur neuere Win-Versionen umstezen können.

und was für n prog bräuchte ich dann , um so was in c#.net zu
schreiben???

Du mußt dazu C# kaufen. Wenn du das startest hast du eine sogenannte Entwicklungsumgebung. Da kommt der Code rein.
Aus ihr heraus kannst du dann den Code testen usw.

Wenn alles stimmt, läßt du ihn zu einer exe kompilieren, die startest du dann in Win.
Die exe funktioniert dann auch auf Fremdrechnern die die C#-Entwicklungsumgebung nicht haben, sie ist eigenständig.

hab leider nur bisher vba in der schule gehabt:smiley:

Vba hat den VB-Editor als Entwicklungsumgebung. Aber es kann nicht kompilieren zu einer exe.
Bei VB ist das anders.

und läuft dass dann versteckt im hintergrund ab?? wäre super

Das legt man im Code fest ob sich ein Programm aktiv in den Vordergrund schiebt während es läuft oder diskret im Hintergrund „arbeitet“.

Wenn du nun keine C#-Entwicklungsumgebung hast, bist du auf die exe die dir Hihahu schickt.
Da ist zum Einen die Problematik. du weißt nicht was in der exe so mitdrinsteckt…
Das ist zumindest überlegenswert bevor du sie startest.

Zum anderen, ich hab ja keine Paranoia daß mir andere User hier was Böses schicken *gg*, und ich halte das für das wichtigere Problem, du kannst an der exe nix abändern.

Besser ist du besorgst dir da die C#-Umgebung und hahiho schickt/zeigt dir den Quelltext des Codes. Dann kannst du da selbst was abändern oder zeigst im C#-Brett den Quellcode vor und andere können dir helfen da was zu ändern.

Oder du erlernst Assembler, dann kannste auch die exe ändern :smile:)

Gruß
Reinhard

Musst nix kaufen / IDE
Hallo
Um einfache C#-Programme zu schreiben brauchst du nur Visual Studio. Dazu reicht schon die kostenlose Express Edition (ACHTUNG: Es gibt zwar schon eine 1020 Beta, aber ich würd dir fürs erste noch die 2008 raten). Ich kann dir den Code schicken und du kompilierst ihn dir dann.
Zum Hintergrund: Es wird eine Exe erstellt, du musst dann aber dem Compiler sagen, ob es eine Kommandozeile ist, ein Programm oder sonstwas. "Unsichtbar könnte vileicht etwas schwer werden, aber nicht unmöglich.
C# Programme laufen grundsätzlich auf allen Windowsen, die .NET haben. Ab Xp haben das auch alle.
Den Code schreib ich nach dem Mittagessen :wink:
mfg
hahihu

Fast fertig
Hallo
Habs doch etwas länger als bis nachm Essen hinausgezögert :wink: Hab vor c.a. 1 oder 2 Stunden angefangen und bin schon fast fertig. Alles da, prüft ob Laufwerk da ist, startet Programm, macht alles toll und so. Das einzige was noch fehlt, ist, dass er den Prozess auch beendet.
mfg
hahihu

danke für deine bemühungen
hoffe du schaffst ihn zuendezuschreiben^^

hast du auch schon versucht ihn zu verstecken??, also er darf im taskmanager sein aber sollte halt nich auf der benutzeroberfläche erscheinen. das würde schon reichen ^^

gruß Chaos-Genie

hi
würde gerne wissen wie weit du mit dem programm bist.
ob alles klappt oder obs probleme gibt?!!

gruß Chaos-Genie

Hallo

Ja klar, sorry konnte seit dem 21.04 nicht mehr an den computer weil ich spontan verreisen musste. Bin erst gestern um 22 uhr gelandet und war um 23:15 zuhause…
ok, ich hab ganz vergessen wie wit ich war. Ich glaube ich war da stehen geblieben, den Prozess zu starten. Sollte nicht mehr lange dauern. Ich kann leider nihct genau sagen wie lange weil ich noch viel um die ohren hab :wink:

mfg

ok, danke für die antwort
hoffe die spontanreise war nicht zu stessig ^^
kein problem wenn ich noch n bisschen wareten muss

gruß Chaos-Genie