Jump to content

Laufwerzzugriff aus MS-DOS verweigert


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo,

 

hat jemand eine Ahnung wie ich Windows XP dazu bewegen kann direkte Laufwerkszugriffe aus alten MS-DOS-Anwendungen zu akzeptieren.

 

Ich hab das Problem dass eine alte DOS-Anwendung eines Kunden direkt aus der Anwendung (Clipper5) eine ASCII-Datei auf eine Diskette schreiben möchte. Wird dies durchgeführt meldet sich XP dass da einer direkt auf ein Laufwerk zugreifen möchte und das ist gar verboten :(

 

Gibts da womöglich einen Schalter um das zuzulassen :confused:

 

Grüße

 

Roland

Link zu diesem Kommentar

Hi premus,

 

habe von ASCII-Dateien und Befehlen leider nicht die große Kenne oder Ahnung, aber bestünde nicht eventuell die Möglichkeit dem Programm oder dem Nutzer über die Sicherheits-Freigabe, die es genauso wie bei den anderen Ordnern(über Eigenschaften) für Laufwerke A gibt, eine Freigabe einzurichten, mit deren Hilfe sich die Fehlermeldung umgehen ließe?

 

Muß zu meiner Schande gestehen, daß ich noch nicht vor einem ähnlichen Problem gestanden habe(Gott sei Dank, puhh und bisher Schwein gehabt, toi, toi, toi xxxxx!!) und möchte mit meinem Kommentar auch nicht unterstellen, daß Du nicht eventuell auch schon selber auf diese Möglichkeit gestoßen sein kannst.

 

Würde mich jedenfalls interessieren, ob es auf die beschriebene Weise klappt?! :wink2:

 

So long &

 

 

P.S.: Noch´ne andere Idee bzw. Frage: Laufen alle anderen Win32-Anwendungen einwandfrei?

Link zu diesem Kommentar

Hi!

Wie sicher bist Du Dir, daß die Clipper-Anwendung direkt auf Disk schreiben will? Es ist m.E. zumindest ungewöhnlich. Üblicher ist es, einen Ausgabeport einzustellen (LPTx, COMx, File), im Programm COPY TO [Device] zu programmieren bzw. mit SET PRINT TO z.B. "File" anzugeben und einen Druckbefehl abzuschicken. Welches Device genau, stellt man dann via Parameter ein (und sollte in der Bedienungsanleitung des Programmes stehen).

Wenn das der Fall ist, könntest Du die Ausgabe an LPTx schicken und LPTx mit einem lokal freigegebenen Generic-Drucker an File mappen.

Gegrüßt

Link zu diesem Kommentar

Hallo Finanzamt,

 

das Programm ist von mir und da bin ich grad sicher dass direkt auf die Diskette zugegriffen wird.

Das schreiben der Datei wird mit "Low-Level" Befehlen bewerkstelligt und die greifen ohne Umwege auf die Laufwerke zu. XP mag das grad überhaupt nicht dass da wer am Betriebssystem vorbei direkt auf Hardware zugreift und ich befürchte dass ich für die Geschichte wirklich einen Windows 98 PC hinstellen muß. Mist aber auch mit diesen alten Programmen (heul). Ich könnte das umschreiben auf einen Windows-Compiler, jedoch wer soll das bezahlen :-(

 

Falls doch noch jemand eine Lösung hat würde ich mich wirklich freuen :-)

 

Grüße

 

Roland

Link zu diesem Kommentar

Hi Premus,

wenn's von Dir ist, dann hast Du ja auch noch die Entwicklungsumgebung und könntest was ändern. Ich denke, es wird auch nicht zu viel sein, weil SchreibenAufDiskette ja nur bei bestimmten Exports Sinn macht. Was nutzt Du: fopen() oder C/ASM-Inline? Und was schreibst Du?

 

Könntest Du das evtl. mit einer Tabelle lösen? Einfache Struktur, nur ein Feld, z.B. ZZ,Char,254 (oder weniger, je nachdem, wieviel Platz Du wirklich brauchst). Falls Du Zeile für Zeile LowLevel schreibst, könntest Du diese Tabelle auf einem freien Select öffnen und in einer Schleife mit APPE BLAN Satz für Satz mit Deinem Report oder was auch immer füllen. Wenn Du dann nicht direkt mit der Tabelle weiterarbeiten kannst, könntest Du sie .SDF nach A:\IrgendWas.TXT kopieren ... schon das müßte funktionieren.

 

Wenn Du das Programm noch längere Zeit brauchst und es auf 32 Bit portieren willst, kannst Du Dir auch Alaska in einer Probierversion runterladen und den Übersetzer bemühen. Die Umstrickerei hält sich in Grenzen und Probleme wie beschrieben gibt es nicht. Du behieltest die zeichenorientierte Anwendung, hättest aber echtes 32Bit. und brauchst für die Distribution nur rund 1 MB .DLLs. Alternative sind auch Delphi mit TDBF, dbWin oder Fox - dann aber mit GUI und entsprechendem Aufwand und wie Du schreibst, auch Kosten.

 

Du kannst mir auch gerne die relevanten Codestücke mailen; mein erstes xBase war dBase 1.1 unter CP/M und für die meisten xBase-Befehle habe ich Substitutionen in C.

Gegrüßt!

 

PS @viele: Das mit Schrott ist so eine Sache. Versucht mal, unter irgendeiner Windows-Version was in Echtzeit zu programmieren. Oder macht eine Meßdatenerfassung. So schön die Mausklickerei ist: Kleine Routinen in ASM-Antiquitäten geschrieben sind um Potenzen performanter als bildreiche "Sind Sie sicher?" Hindernisrennen. Und mancher hat für eine Spezialanwendung 5stellige DEM-Beträge ausgegeben und soll jetzt noch mal das gleiche in Euros ausgeben, damit es auf einer 10*schnelleren Maschine 5*langsamer geht?

Link zu diesem Kommentar

@Zuschauer: Ich stimme Dir zu. FOpen, FRead, FWrite etc. wurden aber in den diversen xBase-Dialekten als "Low-Level" Routinen bezeichnet; ein z.B. sektorweises Lesen/Schreiben war m.W. nirgendwo implementiert. Und genau deshalb (!) fragte ich nach. Diese F...()-Routinen erlaubten z.B. über _dos_creat [int 21h ?] und Handle die diversen Dateioperationen. So jedenfalls sieht es in meiner Lib aus (vgl. Codeschnipsel). Und das sollte als Konsolenanwendung laufen.

Gegrüßt!

/** FOpen() **/
Num FOpen( dateiName, modus)
Char *dateiName;
Num modus;
{
   Signed datei;                       /** Dateihandle --------------------**/
   Int zugriff = modus == FIO_O_NUR_LESEN     ? O_RDONLY :
                 modus == FIO_O_NUR_SCHREIBEN ? O_WRONLY : O_RDWR;
   zugriff |= O_BINARY;                /** Kein CR/LF-Mapping -------------**/
   datei = open( dateiName, zugriff);  /** Datei öffnen -------------------**/
   ErrnoVar = datei != -1 ? 0 : errno; /** Fehlerstatus setzen ------------**/
   return( (Num) datei);               /** Rückgabe: Dateihandle ----------**/
} 

/** FWrite()**/
Num FWrite( datei, puffer, anzZeichen)
Num datei;
PVoid puffer;
Num anzZeichen;
{
   Signed writeStat = write( (int) datei, (Char *) puffer, (int) anzZeichen);
   ErrnoVar = writeStat != -1 ? 0 : errno;
   return( (Num) writeStat);
}

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...