| Autor |
Beitrag |
c#ler
      
Beiträge: 176
Erhaltene Danke: 1
Win7 64Bit
C#, VBA, VS2013 Ultimate
|
Verfasst: Do 18.08.11 16:39
Hi,
Ich schreibe an einer Applikation, die eine Datei vom Windows-Host System auf ein USB Device kopiert.
Hierzu nutze ich die RAPI Klassenbibliothek.
ist ja quasi nicht mehr als
C#-Quelltext 1: 2: 3:
| Communication.RAPI ra = new Communication.RAPI(); ra.Connect(); ra.CopyFileToDevice(@"C:\LogInst.cab", @"\SD Card\LogInst.cab", true); |
Ich habe jetzt das Problem, dass sich mein Windowsfenster "aufhängt"/nicht mehr reagiert bis die Datei zuende geschrieben ist.
Das schreiben dauert aber ca. 10 minuten.
Nun möchte ich verhindern, dass das das meine Setup form auf dem PC sich aufhängt oder wenigstens, dass meine Progressbar den Aktuellen fortschritt anzeigt bzw.
Habt ihr ideen?
|
|
Th69
      

Beiträge: 4807
Erhaltene Danke: 1061
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Do 18.08.11 17:07
Dann benutze dafür am besten den BackgroundWorker, d.h. lagere die Methode in die DoWork-Eventmethode aus.
Die ProgressBar kannst du dann wohl nur im Marquee-Modus anzeigen, da du ja keinen Einfluß auf die Kopiermethode hast (d.h. auch die Dauer nicht abschätzen kannst).
Für diesen Beitrag haben gedankt: c#ler
|
|
c#ler 
      
Beiträge: 176
Erhaltene Danke: 1
Win7 64Bit
C#, VBA, VS2013 Ultimate
|
Verfasst: Fr 19.08.11 14:04
|
|
c#ler 
      
Beiträge: 176
Erhaltene Danke: 1
Win7 64Bit
C#, VBA, VS2013 Ultimate
|
Verfasst: Mi 24.08.11 13:09
So, ich kriege die CAB jetzt soweit auf das Gerät kopiert. Problem ist, dass ich Sie jetzt gleich ausführen möchte ohne das Gerät in die Hand zu nehmen.
Ich denke das geht über die CreateProcess Funktion der Remote API.
C#-Quelltext 1: 2: 3: 4:
| using Communication = OpenNETCF.Desktop.Communication;
Communication.RAPI ra = new Communication.RAPI(); ra.CreateProcess("Lgc.CAB", "start"); |
Das Problem an der Sache:
throw new RAPIException("Error " + errnum.ToString("x") + ": Cannot Create Process" );
Es wird mir lediglich eine Exception geworfen, die sagt: Error C1: Cannot Create Process
Keine weiteren sinnvollen hinweise, was schief gelaufen ist.
Hat jemand eine Idee?
Mein Ansatz ist, dass der Commandlinestring bei
C#-Quelltext 1:
| ra.createProcess("Lgc.CAB", |
so nicht geht. War auch eher auf gutglück.
Please help.
|
|
c#ler 
      
Beiträge: 176
Erhaltene Danke: 1
Win7 64Bit
C#, VBA, VS2013 Ultimate
|
Verfasst: Mi 24.08.11 13:56
hab mal testweise
C#-Quelltext 1:
| ra.CreateProcess(@"\SD Card\Navigator.exe"); | eingegeben und dann startet er auch meine Navi software...
Funktioniert CreateProcess evtl. mit Cabs nicht?
|
|
Horschdware
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: Mi 24.08.11 14:04
Hallo,
soweit ich weiss, sind CAB-Dateien einfache Archive und keine ausführbaren Programme. Kann es sein, dass du vorhast, die Datei mit einem geeigneten Entpacker zu öffnen?
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
|
c#ler 
      
Beiträge: 176
Erhaltene Danke: 1
Win7 64Bit
C#, VBA, VS2013 Ultimate
|
Verfasst: Mi 24.08.11 14:06
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mi 24.08.11 16:02
Sollte da nicht noch ein Leerzeichen zwischen die Argumente?
_________________ >λ=
|
|
c#ler 
      
Beiträge: 176
Erhaltene Danke: 1
Win7 64Bit
C#, VBA, VS2013 Ultimate
|
Verfasst: Fr 26.08.11 10:47
Kha hat folgendes geschrieben : | | Sollte da nicht noch ein Leerzeichen zwischen die Argumente? |
Wie meinst du das? zwischen jeden Part?
quasi / xx/ xx?
Sorry falls ich mich da grad doof anstelle^^
|
|
Horschdware
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: Fr 26.08.11 10:49
C#-Quelltext 1:
| ra.CreateProcess("wceload", "/noaskdesk /noui Lgc.cab"); |
Hier müssten Leerzeichen stehen, da die Einzelparamter sonst nicht erkannt werden
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
|
c#ler 
      
Beiträge: 176
Erhaltene Danke: 1
Win7 64Bit
C#, VBA, VS2013 Ultimate
|
Verfasst: Do 15.09.11 16:33
Horschdware hat folgendes geschrieben : | C#-Quelltext 1:
| ra.CreateProcess("wceload", "/noaskdesk /noui Lgc.cab"); |
Hier müssten Leerzeichen stehen, da die Einzelparamter sonst nicht erkannt werden |
ich habe es genau so gemacht. Nun wird auf dem Gerät eine Meldung geworfen:
please specify a .cab file or double tap a .cab
file to install the application.
ich habe es mit SD Card als verzeichnis versucht.
C#-Quelltext 1:
| ra.CreateProcess("wceload", "/noaskdesk /sd card /noui Lgc.cab"); |
Jemand ne idee?
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Do 15.09.11 22:12
Was hast du denn mit dem Pfad angestellt  . So vielleicht?
C#-Quelltext 1:
| ra.CreateProcess("wceload", @"/noaskdesk /noui ""\SD Card\Lgc.cab"""); |
_________________ >λ=
Für diesen Beitrag haben gedankt: c#ler
|
|
c#ler 
      
Beiträge: 176
Erhaltene Danke: 1
Win7 64Bit
C#, VBA, VS2013 Ultimate
|
Verfasst: Fr 16.09.11 13:49
|
|
c#ler 
      
Beiträge: 176
Erhaltene Danke: 1
Win7 64Bit
C#, VBA, VS2013 Ultimate
|
Verfasst: Mo 19.09.11 13:11
|
|
Horschdware
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: Mo 19.09.11 13:28
Nunja, das WCE Tool findet wohl deine Datei nicht. Hast du es schon mal mit absoluten Pfaden versucht?
Was passiert, wenn du das Tool über die Kommandozeile mit deinen im Programm beschriebenen Parametern aufrufst?
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
|
c#ler 
      
Beiträge: 176
Erhaltene Danke: 1
Win7 64Bit
C#, VBA, VS2013 Ultimate
|
Verfasst: Mo 19.09.11 13:52
Horschdware hat folgendes geschrieben : | Nunja, das WCE Tool findet wohl deine Datei nicht. Hast du es schon mal mit absoluten Pfaden versucht?
Was passiert, wenn du das Tool über die Kommandozeile mit deinen im Programm beschriebenen Parametern aufrufst? |
Gute Antwort/Gegenfrage.
Ich werde mal schauen, hab das manuell noch garnicht versucht.
|
|
c#ler 
      
Beiträge: 176
Erhaltene Danke: 1
Win7 64Bit
C#, VBA, VS2013 Ultimate
|
Verfasst: Di 20.09.11 16:25
|
|
Horschdware
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: Di 20.09.11 17:34
Moment!
Angenommen deine Datei liegt in "D:\Temp\LGC.CAB", dann funktioniert dein Beispiel mit der Konsole NUR DANN, wenn du dich gerade im Verzeichnis "D:\" befindest, da du wieder eine relative Pfadangabe verwendet hast.
Wie du das in Code umsetzt hatten wir doch schon
| Zitat: |
C#-Quelltext 1:
| ra.CreateProcess("wceload", @"/noaskdesk /noui ""\SD Card\Lgc.cab"""); | |
Ersetze nun in dem Aufruf den Pfad durch den richtigen Pfad. Der Aufruf in dem Zitat geht ja davon aus, dass sich die cab-Datei in einem Unterverzeichnis des Ausführungsverzeichnisses befindet - und das muss nicht zwangsläufig das Verzeichnis sein, in dem das Programm selbst abgelegt ist. Dein Experiment auf der Kommandozeile ist da ein gutes Beispiel dafür: Wärest du im Verzeichnis "C:\Windows\" und würdest dein Kommando absetzen, dann würde das WCE Tool ja in "C:\Windows\Temp\" nach deiner Datei suchen - wo sie sich ja nicht befindet.
Nutze einen absoluten Pfad und es sollte gehen.
_________________ Delphi: XE - OS: Windows 7 Professional x64
Für diesen Beitrag haben gedankt: c#ler
|
|
c#ler 
      
Beiträge: 176
Erhaltene Danke: 1
Win7 64Bit
C#, VBA, VS2013 Ultimate
|
Verfasst: Mi 21.09.11 09:24
Horschdware hat folgendes geschrieben : | Moment!
Angenommen deine Datei liegt in "D:\Temp\LGC.CAB", dann funktioniert dein Beispiel mit der Konsole NUR DANN, wenn du dich gerade im Verzeichnis "D:\" befindest, da du wieder eine relative Pfadangabe verwendet hast.
Wie du das in Code umsetzt hatten wir doch schon
| Zitat: |
C#-Quelltext 1:
| ra.CreateProcess("wceload", @"/noaskdesk /noui ""\SD Card\Lgc.cab"""); | |
Ersetze nun in dem Aufruf den Pfad durch den richtigen Pfad. Der Aufruf in dem Zitat geht ja davon aus, dass sich die cab-Datei in einem Unterverzeichnis des Ausführungsverzeichnisses befindet - und das muss nicht zwangsläufig das Verzeichnis sein, in dem das Programm selbst abgelegt ist. Dein Experiment auf der Kommandozeile ist da ein gutes Beispiel dafür: Wärest du im Verzeichnis "C:\Windows\" und würdest dein Kommando absetzen, dann würde das WCE Tool ja in "C:\Windows\Temp\" nach deiner Datei suchen - wo sie sich ja nicht befindet.
Nutze einen absoluten Pfad und es sollte gehen. |
critical Fail,
ich hab einmal "/" statt "\" verwendet...okay, vielen Dank..es funktioniert jetzt natürlich, nur muss ich die reihenfolge ändern, da keine befehle mehr nach noaskdesk angenommen werden, dementsprechend muss das noui vorher erfolgen.
Vielen Dank 
|
|
c#ler 
      
Beiträge: 176
Erhaltene Danke: 1
Win7 64Bit
C#, VBA, VS2013 Ultimate
|
Verfasst: Mi 21.09.11 10:47
So, jetzt funktioniert es.
Silent und ohne Probleme.
Vielen Dank
|
|