WinFuture-Forum.de: Suche VB.Net4 Code-Alternative zu einem bestimmten Batchscript... - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Suche VB.Net4 Code-Alternative zu einem bestimmten Batchscript...


#1 Mitglied ist offline   DeX 

  • Gruppe: aktive Mitglieder
  • Beiträge: 92
  • Beigetreten: 02. Januar 10
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 29. Mai 2012 - 18:28

Hi, ich bin noch recht neu in VB.Net4 Programmierung und habe ein Problem bzw. eine Frage.

Bisher benutze ich einen kleinen und simplen Batchscript um bestimmte Programme so zu starten, dass sie statt im Systemordner "AppData" in ihrem eigenen Programmordner arbeiten/speichern...

Der Batchscript sie wie folgt aus:

set appdata=%cd%
anwendung.exe


Nun versuche ich aber, die gleiche Funktionsweise ("Ohne externe .Bat Datei) über einen Button in einer von mir geschriebenen VB.Net Anwendung auszuführen. Dies gelingt leider überhaupt nicht, da es dort anscheinend nicht wirklich möglich ist, mehrzeilige Batchbefehle auszuführen...meine Googlesuche zu diesem Thema ergab zwar dutzende Treffer, die aber letztendlich alle darauf hinaus liefen, dass man einfach bei den üblichen batchdateien bleiben soll...was für mich aber keine Option ist, da die Funktionsweise die ich suche, eigentlich in VB.NET umsetzbar sein dürfte.

Darum meine Frage, gibt es eine einfache Möglichkeit in VB.net eine externe Anwendung (gleiches Verzeichniss wie VB.Net-Anwendung) so zu starten, dass sie statt standartmäßig in AppData in ihrem eigenen Verzeichniss arbeitet/speichert?

Gruß, DeX
Mein System:

0

Anzeige



#2 Mitglied ist offline   Stefan_der_held 

  • Gruppe: Offizieller Support
  • Beiträge: 14.289
  • Beigetreten: 08. April 06
  • Reputation: 885
  • Geschlecht:Männlich
  • Wohnort:Dortmund NRW
  • Interessen:Alles wo irgendwie Strom durchfließt fasziniert mich einfach weswegen ich halt Elektroinstallateur geworden bin :)

geschrieben 29. Mai 2012 - 20:35

habe zwar schon gefühlte Jahre nicht mehr in VB geschrieben... aber meine ich mich zu erinnern, dass es Verknüpfungsoperatoren gibt die es ermöglichen Befehle aneinander zu reihen sodass diese zwar nacheinander ausgeführt werden jedoch ggf. vollkommen unabhängig voneinander sind.

Nur weiß ich grad nicht welche das bei VB waren...

&&

;

|


oder ähnlich meine ich...

Dieser Beitrag wurde von Stefan_der_held bearbeitet: 29. Mai 2012 - 20:36

0

#3 Mitglied ist offline   DeX 

  • Gruppe: aktive Mitglieder
  • Beiträge: 92
  • Beigetreten: 02. Januar 10
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 30. Mai 2012 - 10:18

Danke für den Versuch^^ ...werde mal mein Glück mit den Zeichen versuchen.
Mein System:

0

#4 Mitglied ist offline   DeX 

  • Gruppe: aktive Mitglieder
  • Beiträge: 92
  • Beigetreten: 02. Januar 10
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 30. Mai 2012 - 13:03

Also nur für den Fall dass ichs total falsch mache...

Dieser Code funktioniert schonmal und startet die Anwendung...:

Sub Button1Click(sender As Object, e As EventArgs)
Shell("cmd /c " & Chr(34) & "Anwendung.exe" & Chr(34))
End Sub


Allerdings funktioniert folgendes nicht...:

Sub Button1Click(sender As Object, e As EventArgs)
Shell("cmd /c " & Chr(34) & "set appdata=%cd%" & "Anwendung.exe" & Chr(34))
End Sub


Wenn ich && benutze kommt die Fehlermeldung dass ein Ausdruck erwartet wird, und bei ; und | kommt die Meldung von wegen ungültiges Zeichen :(
Mein System:

0

#5 Mitglied ist offline   Kirill 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.590
  • Beigetreten: 04. Dezember 06
  • Reputation: 121
  • Geschlecht:Männlich
  • Wohnort:BT

geschrieben 30. Mai 2012 - 13:32

Ich verstehe langsam, was du meinst. Du musst den Pipeoperator & mit in den Ausdruck packen, der ausgeführt wird. Im Moment gilt
cmd /c "set appdata=%cd%Anwendung.exe"
als auszuführende Anweisung und das geht erwartungsgemäß mörderschief.
Tipp: versuche zuerst, das ganze in einer einzeiligen Batch hinzubekommen. Müsste aussehen wie
cmd /c set appdata=%cd% & Anwendung.exe
und danach setzt du das mal mit VB um. Ich tippe einfach mal auf
Shel("cmd /c set appdata=%cd% & Anwendung.exe")

Du musst hier einfach unterscheiden, ob du in VB verkettest, oder in der Konsole, die du aufrufst. In VB verketten würde ich in deinem Fall übrigens nicht, weil das warscheinlich 0,nix bringen wird, weil die Variable nur in der jeweiligen Konsolensitzung gesetzt wird. Du hast es also genau richtig gemacht, eine Konsole aufzurufen und ihr die beiden Befehle zu übergeben.

Dieser Beitrag wurde von Kirill bearbeitet: 30. Mai 2012 - 13:37

Most rethrashing{
DiskCache=AllocateMemory(GetTotalAmountOfAvailableMemory);}
0

#6 Mitglied ist offline   DeX 

  • Gruppe: aktive Mitglieder
  • Beiträge: 92
  • Beigetreten: 02. Januar 10
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 30. Mai 2012 - 13:37

YES! Ich danke dir,
Shell("cmd /c set appdata=%cd% & Anwendung.exe") hat funktioniert, unglaublich dass alle bei den Sachen die ich bisher bei Google gefunden habe, gemeint haben, das das nicht möglich wäre :D

DankeDankeDanke!

Interessant ist hier, dass er diesmal auch nicht meckert, dass zwischen set und appdata ein Leerzeichen ist, das war nämlich das Hauptproblem welches ich beim rumprobieren mit dem Code hatte...

Bin eben noch sehr neu in VB.Net Programmierung und bin froh dass ich bisher einige Simple, dafür aber funktionstüchtige Anwendungen hinbekommen habe...man hat da echt unendliche Möglichkeiten, aber eben auch eine unendliche Komplexität, wenn man sich mit der Materie nicht wirklich auskennt...so wie ich :D

Dieser Beitrag wurde von DeX bearbeitet: 30. Mai 2012 - 13:42

Mein System:

0

#7 Mitglied ist offline   Kirill 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.590
  • Beigetreten: 04. Dezember 06
  • Reputation: 121
  • Geschlecht:Männlich
  • Wohnort:BT

geschrieben 30. Mai 2012 - 14:13

Naja, was du da gerade hast, hat mit VB so ziemlich 0 zu tun. Das VB ist Shell(), der Rest ist normale Windows-Konsolenprogrammierung. Insofern lernst du im Moment noch Konsole :D
Most rethrashing{
DiskCache=AllocateMemory(GetTotalAmountOfAvailableMemory);}
0

#8 Mitglied ist offline   DeX 

  • Gruppe: aktive Mitglieder
  • Beiträge: 92
  • Beigetreten: 02. Januar 10
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 30. Mai 2012 - 14:18

Das ist mir schon klar, brauchte diese spezielle Shell-Funktion ja auch für eine etwas komplexere VB.net-Anwendung, die außer diesem Script noch einiges mehr auf dem Kasten hat...

Wenn ich damit fertig bin und evtl. das Ok von den Entwicklern der externen Exe bekomme, kann ich ja mal einen Thread für mein kleines Tool aufmachen^^

Das sollte für SEHR viele Leute sehr nützlich sein ;)
Mein System:

0

#9 Mitglied ist offline   DeX 

  • Gruppe: aktive Mitglieder
  • Beiträge: 92
  • Beigetreten: 02. Januar 10
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 30. Mai 2012 - 15:47

Hey ich muss leider zurück rudern, der Arbeitspfad für das externe Programm wird zwar von Appdata in den Ordner des VB.NET-Tools umgelenkt, allerdings kann es (das ext. Programm) dann nur einen leeren Ornder erstellen und meint dann, dass es dort keine weiteren Dateien und Ordner erstellen bzw. darin arbeiten kann :(

Fehlt in dem Shell-Befehlt vllt. noch ein Parameter dafür?

Gruß

Dieser Beitrag wurde von DeX bearbeitet: 30. Mai 2012 - 15:56

Mein System:

0

#10 Mitglied ist offline   Kirill 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.590
  • Beigetreten: 04. Dezember 06
  • Reputation: 121
  • Geschlecht:Männlich
  • Wohnort:BT

geschrieben 30. Mai 2012 - 16:00

Dann mach aus %cd% den Pfad, in dem das ganze liegen soll. Oder soll das ganze einfach gleich dort liegen? Wäre nett, mal den Programmfluss vom externen Programm zu kennen, woran das genau scheitert. Vielleicht Rechte? Hat dein Benutzerkonto volle Schreibrechte in dem Ordner?
Most rethrashing{
DiskCache=AllocateMemory(GetTotalAmountOfAvailableMemory);}
0

#11 Mitglied ist offline   DeX 

  • Gruppe: aktive Mitglieder
  • Beiträge: 92
  • Beigetreten: 02. Januar 10
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 30. Mai 2012 - 16:08

PM...
Mein System:

0

#12 Mitglied ist offline   DeX 

  • Gruppe: aktive Mitglieder
  • Beiträge: 92
  • Beigetreten: 02. Januar 10
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 30. Mai 2012 - 19:01

Also ich habe jetzt nochmal ein bisschen rumprobiert und es scheint, dass der/die Befehle nicht richtig übergeben werden :/

Wenn ich eine .bat datei erstelle und dort ...

set appdata=%cd% & Anwendung.exe

... eingebe, passiert das gleiche wie bei meinem Launcher...die Anwendung startet, erstellt einen leeren Ordner für seine arbeitsdateien, hat aber dann anschließend keine Zugriffsrechte mehr darauf -> Fehlermeldung.

Wenn ich das &-zeichen wieder wegnehme und die beiden Befehle untereinander schreibe funktioniert die .bat aber plötzlich wieder...aaaaarg, wo ist der FEHLER?

Also ist das exakt das gleiche Problem, was meine VB.Net Anwendung beim Ausführen dieses Befehls hat -,-

Shell("cmd /c set appdata=%cd% & Anwendung.exe")



EDIT:
OMG Es lag an den Leerzeichen :imao:
Das funktioniert:
Shell("cmd /c set appdata=%cd%&Anwendung.exe")

Dieser Beitrag wurde von DeX bearbeitet: 30. Mai 2012 - 19:34

Mein System:

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0