AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein ShellExecute und schreibgeschütztes Medium

ShellExecute und schreibgeschütztes Medium

Ein Thema von Poolspieler · begonnen am 1. Jul 2012 · letzter Beitrag vom 2. Jul 2012
Antwort Antwort
Seite 1 von 2  1 2   
Poolspieler

Registriert seit: 9. Aug 2004
165 Beiträge
 
Delphi 10.3 Rio
 
#1

ShellExecute und schreibgeschütztes Medium

  Alt 1. Jul 2012, 21:26
Hallo,
ich würde mit folgendem Code gern ein externes Programm starten:
Code:
ShellExecute(Application.Handle, 'open', PChar(_datei), PChar(_parameter), Nil, SW_ShowNormal);
Dies funktioniert auch problemlos.

ABER:
Wenn das AUSZUFÜHRENDE Programm auf einem schreibgeschützten Medium (in meinem Fall eine SD-Karte) liegt, dann bekomme ich NUR unter WinXP folgende fehlermeldung von Windows (der Rückgabewert ShellExecute ist OK!):

Zitat:
Der Datenträger ist schreibgeschützt und kann nicht beschrieben werden. Entfernen Sie den Schreibschutz vom Datenträger in Laufwerk D:.
Das ganze tritt unter Win7 NICHT auf.

Ich habe es auch schon mit ShellExecuteEx ausprobiert --> gleiches Ergebnis.

Warum glaubt WinXP, ShellExecute wolle irgendwo schreibend zugreifen? Ich habe auch schon die notepad.exe mal auf das schreibgeschützte, und mal auf z.B. C:\ gelegt. --> Auf dem schreibgeschützten Verzeichnis bekomme ich die Fehlermeldung - auf C:\ nicht.
--> führe ich die Datei direkt aus (also nicht über ShellExecute, sondern über den Dateiexplorer), dann kommt KEIN Fehler. Es liegt also DEFINITIV am ShellExecute-Aufruf.

Ich versteh die Welt nicht mehr

Hat jemand eine Idee?

Viele Grüße,

Poolspieler
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.105 Beiträge
 
Delphi 12 Athens
 
#2

AW: ShellExecute und schreibgeschütztes Medium

  Alt 1. Jul 2012, 21:38
Was für eine Datei willst du öffnen und mit welchem Programm ist sie verknüpft?

Einige Programme öffnen Dateien nicht nur ReadOlny oder sie erstellen gerne mal im Verzeichnis der zu öffnenden Datei eine temporäre Hilfsdatei.
> also Schreibzugriffe

Unter Windows 7 könnte da eventuell die Virtualisierung für schlechte/alte Programme zuschlagen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 1. Jul 2012 um 23:14 Uhr)
  Mit Zitat antworten Zitat
Poolspieler

Registriert seit: 9. Aug 2004
165 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: ShellExecute und schreibgeschütztes Medium

  Alt 1. Jul 2012, 22:08
Hi,
danke für Deine Antwort!

Eigentlich will ich ein von mir geschriebenes Delphi-Programm öffnen.
Oder ein mit Innosetup erzeugtes setup.exe.
Ich habe es aber auch mit der notepad.exe aus WinXP versucht.

--> bei allen Programmen ist es das selbe Problem.

Gruß,

Poolspieler
Andreas
  Mit Zitat antworten Zitat
Poolspieler

Registriert seit: 9. Aug 2004
165 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: ShellExecute und schreibgeschütztes Medium

  Alt 1. Jul 2012, 22:28
Hallo,
ich habe eine weiter Erkenntnis:

Das Problem tritt NUR bei SCHREIBGESCHÜTZTEN SD-Karten auf!
--> Bei einer gebrannten CD tritt das Problem NICHT auf.

Vielleicht sind hier die SD-Karten ein magischer Sonderfall und ich sollte diesen im Kleingedruckten der Software-Beschreibung einfach ausschließen...

Aber vielleicht hat ja jemand noch eine bessere Idee...

Viele Grüße,

Poolspieler
Andreas
  Mit Zitat antworten Zitat
WM_CLOSE

Registriert seit: 12. Mai 2010
Ort: königsbronn
398 Beiträge
 
RAD-Studio 2009 Pro
 
#5

AW: ShellExecute und schreibgeschütztes Medium

  Alt 2. Jul 2012, 01:08
Ich habe mal einen Filesystem Treiber geschrieben, in den Dokus stand etwas von Dateisystemtypen.
Der CDFS-Treiber hat zum beispiel keine Funktionen zum Schreiben ind ist auch so gekennzeichnet.

Die SD-Karte ist vermutlich FAT32 oder NTFS formatiert, also mit Schreibfunktion, welche nur durch den Schalter an der Karte selbst unterdrückt wird.

PS: versuch es mal mit Hier im Forum suchenCreateProcess
Delphi programming

Geändert von WM_CLOSE ( 2. Jul 2012 um 01:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.105 Beiträge
 
Delphi 12 Athens
 
#6

AW: ShellExecute und schreibgeschütztes Medium

  Alt 2. Jul 2012, 08:16
Bei NTFS wird z.B. das Datum/Uhrzeit des letzten Dateizugriffs gespeichert
und ich glaub im Windows 7-Treiber wurde dieses Verhalten wieder geändert.

Man braucht also nur eine Datei zu öffnen und es geschieht ein Schreibzugriff.


Zusammen mit der Aussage von WM_CLOSE (ups, jetzt ist mein Browser weg) könnte es da schon die Auswirkungen erklären.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 2. Jul 2012 um 08:18 Uhr)
  Mit Zitat antworten Zitat
WM_CLOSE

Registriert seit: 12. Mai 2010
Ort: königsbronn
398 Beiträge
 
RAD-Studio 2009 Pro
 
#7

AW: ShellExecute und schreibgeschütztes Medium

  Alt 2. Jul 2012, 09:55
Nochmal zur Erlklärung: Treiber sind im Grunde wie Klassen, die ein Interface implementieren.

zur Veranschauichung nehmen wir die Interfaces
IWritableFS
{
procedure WrieFile(...);
...
}
und
IReadableFS
{
procedure ReadFile(...);
}

NTFS implementiert beide Interfaces,
CDFS nur IReadableFS

Damit weiß Windows, ob es auf einem bestimmten FS schreiben kann.

Jetzt kommt die NTFS? formatierte SD-Karte. Windows sieht: NTFS->beschreibbar.
Aber die SD-Karte macht mit dem lock einen Strich durch die Rechnung.

Im Vista/7 Treiber für die SD-Karten wurde das problem scheinbar umgangen, indem die tatsächliche Beschreibbarkeit geprüft wird.

Mit CreateProcess müsste es eig. trotzdem gehen.
Delphi programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.105 Beiträge
 
Delphi 12 Athens
 
#8

AW: ShellExecute und schreibgeschütztes Medium

  Alt 2. Jul 2012, 10:13
Mir fällt auch grade ein, daß ich unter Windows 7 diesbezüglich auch noch keine Probleme bemerkt hab,
auch nicht bei USB-Sticks mit Schreibschutz, egal ob FAT32, ExtFAT oder NTFS.

(bei SD-Karten war ich noch nicht auf die Idee gekommen diese mit NTFS zu beschreiben, da die andere Hardware es eh nie verstanden hätte)


Eventuell solltest du es dann auch nochmal mit solchen USB-Sticks probieren, welche ebenfalls einen Schreibschutzschalter besitzen.



PS: Bei USB wird der Schreibschutz über den Controlerchip im USB-Stick geregelt (den man nur im abgezogenen Zustand umschalten sollte/darf) und je nach dem was dort für ein mistiger Controler verbaut wurde, teilt er dem Dateisystemtreiber ordnungsgemäß mit, ob dieses Medium beschreibbar ist.

Bei den SD-Karten drückt dieser Schalter einen Kontakt im Lesegerät, womit dann natürlich das Lesegerät darauf reagieren muß.
Es könnte also auch sein, daß einige Billiggeräte nicht drauf reagieren, bzw. es erklärt auch, warum einige zu straffe Kontakte gerne mal diesen Schalter beim Einschieben umstellen, was ich mal bei einer Fotokamera hatte.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Poolspieler

Registriert seit: 9. Aug 2004
165 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: ShellExecute und schreibgeschütztes Medium

  Alt 2. Jul 2012, 10:45
Hallo Zusammen,
ich habe nochmal einige (viele) Tests gemacht.

Ergebnisse:
1. Das Problem tritt auch bei schreibgeschützten USB-Sticks auf
2. Ich habe zwei SD-Reader getestet
- einen im Laptop (Samsung) integrierten
- einen externen (getestet unter Win7 und WinXP)
--> bei beiden Readern ist das selbe Verhalten vorhanden
3. ich habe Freund Procmon mal mitlaufen lassen
--> himitsu hat recht. Es wird zuerst ein QueryBasicInformationFile und anschliessend SetBasicInformationFile durchgeführt. Bei SetBAsicInformationFile(CreationTime, LastAccessTime, etc.) kommt der Fehler
4. CreateProcess habe ich versucht, da bekomme ich aber viele Fehler - wahrscheinlich rufe ich den Befehl noch mit falschen Parametern auf - das werde ich im Forum aber mal nachlesen...


Viele Grüße,

Poolspieler
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.105 Beiträge
 
Delphi 12 Athens
 
#10

AW: ShellExecute und schreibgeschütztes Medium

  Alt 2. Jul 2012, 11:17
Es gibt für's NTFS scheinbar einen eine Einstellungsmöglichkeit, wo man solche Schreibaktionen deaktivieren kann.
Aber wie und wo, das weiß ich auch nicht.

Das ist mir mal untergekommen, beim Thema Windows auf Flash-Disk (noch vor den SSD, wo man eine Flash-Karte via IDE angeschlossen hat), oder als Live-System auf USB-Disk laufen zu lassen.
Da diese Speicher eine begrenzte Lebensdauer haben/hatten, was das Beschreiben betrifft, wurde damals irgendein "Hack" verwendet, welcher eben Jenes verhinderte.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 2. Jul 2012 um 11:20 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz