Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Netzlaufwerk W7 64 Bit (https://www.delphipraxis.net/169025-netzlaufwerk-w7-64-bit.html)

udo888 25. Jun 2012 09:14

Delphi-Version: 5

Netzlaufwerk W7 64 Bit
 
Hallo,
ich plage mich mit einem irren Problem herum - vielleicht hat jemand eine Idee.

Ich erstelle im 64-Bit-Windows-7 einen Ordner, gebe diesen frei und verbinde (auf dem selben PC) ein Netzlaufwerk auf diesen. Im Explorer werden alle enthaltenen Dateien angezeigt, kein Problem.

Mein Delphi-Programm (mit Delphi 7 erstellt) soll nun auf diese Dateien zugreifen. Sowohl FileExists als auch FindFirst liefern keine Ergebnisse. Wenn ich aus dem Programm heraus BrowseForFolder aufrufe, wird das Laufwerk zwar angezeigt, ist aber rot "durchgeixt". Sobald ich darauf klicke, kann ich es trotzdem öffnen und bekomme auch alle enthaltenen Unterordner angezeigt. Ab diesen Moment funktioniert auch FileExists wieder.
Wenn ich dieses Netzlaufwerk aus einem anderen PC anspreche, habe ich das selbe Problem.

Erstaunlicherweise hatte ich das Problem bei 32-Bit-Systemen noch nicht. Wo klemmt die Säge??? Kann ich irgendwie das gemappte Laufwerk zwanghaft öffnen?

mkinzler 25. Jun 2012 09:15

AW: Netzlaufwerk W7 64 Bit
 
Unter welchem Benutzer läuft das Delphiprogramm?

udo888 25. Jun 2012 09:16

AW: Netzlaufwerk W7 64 Bit
 
Auf dem Standardbenutzer mit vollen Admin-Rechten.

Morphie 25. Jun 2012 09:20

AW: Netzlaufwerk W7 64 Bit
 
Du verbindest das Netzlaufwerk ganz normal mit der Windows 7 Oberfläche?
Tritt der Fehler auch auf, wenn du das Netzlaufwerk gerade neu zugeordnet hast? Oder nur z.B. nach einem Neustart?
Ist der Rechner per WLAN im Netzwerk?

udo888 25. Jun 2012 09:24

AW: Netzlaufwerk W7 64 Bit
 
Ich verbinde das Laufwerk im Explorer über Netzwerk mit Wiederherstellen bei Neustart. Testweise werde ich jetzt einmal einen "net use ..." in die Autostart eintragen.

udo888 25. Jun 2012 09:31

AW: Netzlaufwerk W7 64 Bit
 
Also Netzlaufwerk getrennt, neu gebootet.
Dann über die Kommandozeile mit "net use p: ..." das Laufwerk zugewiesen. Im Explorer wird dieses sofort angezeigt.

In meinem Programm wird es auch danach nicht gefunden, das Laufwerk hat in BrowseForFolder weiterhin ein rotes X.

ChrisE 25. Jun 2012 10:00

AW: Netzlaufwerk W7 64 Bit
 
Zitat:

Zitat von udo888 (Beitrag 1172278)
Also Netzlaufwerk getrennt, neu gebootet.
Dann über die Kommandozeile mit "net use p: ..." das Laufwerk zugewiesen. Im Explorer wird dieses sofort angezeigt.

In meinem Programm wird es auch danach nicht gefunden, das Laufwerk hat in BrowseForFolder weiterhin ein rotes X.

Das hört sich doch danach an, als ob Du das Netzlaufwerk unter einem Benutzerkonto erstellst und das Programm dann im vermeintlich selben Account mit erhöhten Rechten startest. Unter Vista und Win7 sind Benutzer mit Adminrechten auch erstmal nur Benutzer (vorausgesetzt UAC ist aktiviert). Erst wenn Prozesse/Anwendungen erhöhte Rechte brauchen, werden diese einzelnen Prozesse auf dieses höhere Level geschaltet. Innerhalb dieses höheren Levels (Admin-Level) gibt es zwar wohl die Netzlaufwerke, aber sie sind nie verbunden worden - sonder nur angelegt. Daher kommt das rote X. Man kann ein Win-API-Aufruf benutzten um das Netzlaufwerk wieder zu verbinden - mir fällt nur gerade nicht ein, wie der heißt.

Gruß, Chris
[EDIT] Testweise mal eine Komandozeile mit Adminrechten starten und das
Code:
net use
... ausführen und dann nochmal das Programm starten.[/EDIT]

Morphie 25. Jun 2012 10:03

AW: Netzlaufwerk W7 64 Bit
 
Zitat:

Zitat von udo888 (Beitrag 1172273)
Auf dem Standardbenutzer mit vollen Admin-Rechten.

Du hast das Programm also als Administrator ausgeführt? Ist die UAC-Abfrage erschienen?
So wie ich das verstehe musst du die Netzlaufwerke dann unter den gleichen Berechtigungen verbinden...
Versuch also mal eine Batchdatei zu erstellen mit dem "net use" Befehlen...

Dann Netzlaufwerk trennen, Rechner neustarten, Rechtsklick auf die Batch > Als Administrator ausführen
Findet dein Delphi-Programm das Netzlaufwerk dann richtig?

Edit: verdammt, zu langsam

udo888 25. Jun 2012 11:23

AW: Netzlaufwerk W7 64 Bit
 
Korrekt, damit hätte ich des Übels Ursache gefunden! Vielen Dank erstmal!

Ich habe die Batch mit dem "net use ..." als Administrator ausgeführt, worauf der Explorer nichts angezeigt hat. Erst mit einem normalen Start wurde es gelistet.

Das Programm selber ist ein selbst geschriebenes Setup-Programm, welches beim Start die Administrator-Abfrage auslöst. Das Programm liest aus der Registry, dass ein Datenverzeichnis X:\Daten existiert. Da jedoch das Programm in einer "anderen Welt" lebt, findet es das bezeichnete Laufwerk nicht.

Wie aber kann ich ein Laufwerk als Administrator zuweisen? Hier auf dem Test-PC gibt es nur einen Standardbenutzer.
Bei vielen Anwendern habe ich vom jeweiligen Admin zur Installation einen Zugang mit Administrator-Rechten bekommen, war aber nicht der Administrator selber.
Würde bedeuten, dass mein Setup (welches ein Update installieren soll) ins Leere läuft.

Kann ich ein Netzlaufwerk im Programm selber verbinden bzw. die Verbindung herstellen?

ChrisE 25. Jun 2012 15:58

AW: Netzlaufwerk W7 64 Bit
 
Hallo,

also - eins nach dem anderen :-)

1. Wenn Dein Programm per manifest sagt, dass es höhere Rechte benötigt passiert folgendes:
  • WinXP: User hat die Rechte -> nichts
  • WinXP: User hat die Rechte nicht -> Ausführen als Dialog öffnet sich
  • Vista / Win7: User hat die Rechte -> UAC-Dialog fragt ggf. nach ob die Rechte für dieses Programm gewährt werden sollen
  • Vista / Win7: User hat die Rechte nicht -> ausführen als Dialog um den Prozess die Rechte zu geben
Ab Windows Vista passiert das "Anfordern von höheren Rechten" zusätzlich durch den Dateinamen der exe-Datei. "Update" und "Setup" sind hier nur ein paar Beispiele.

2. Das du das Batch mit erhöhten Rechten ausgeführt hast und im Explorer zunächst nichts gesehen hast sagt ja erstmal nichts. Gab es Fehlermeldungen in der Komandozeile? Hat Dein Setup danach immer noch Probleme gehabt?

3. Wann braucht man Adminrechte für ein Update / Installation:
Es gibt durchaus Fälle, bei denen du keine erhöhten Rechte benötigst. Das kannst aber nur du entscheiden / herausbekommen. Du Programmierst das Update ja :-) Z.B.: Erstellst du Programmverknüpfungen in "All Users\Desktop"? Registrierst du ActiveX-Sachen im System? Installierst du Treiber?
Was ich damit sagen will ist, je nachdem was dein "Installer" macht, braucht er diese Rechte oder eben auch nicht.
Wenn er sie braucht, dann musst du Dich damit auseinander setzen, wie du diese Probleme lösen kannst (Existiert das Netzlaufwerk etc.) - aber erst dann. Wenn nicht, benenne Dein Installer um und alles läuft durch im Benutzerkontext :-)

Gruß, Chris

udo888 25. Jun 2012 18:42

AW: Netzlaufwerk W7 64 Bit
 
Danke für die Antwort.

zu 1. und 3.
Das Programm hat "Setup" im Namen, wird also deshalb zu höheren Rechten genötigt. Die Rechte sind auch notwendig, da Einträge unter LOCAL_MACHINE gesetzt werden müssen. Dafür würde jedoch auch eine Benutzeranmeldung mit Administrator-Rechten ausreichend sein.
Das Problem ist, dass ich bei Installationen oft nur einen solchen Benutzerzugang vom Netzwerk-Admin freigeschalten bekomme. Über diesen Zugang verknüpfe ich das Laufwerk und installiere erstmalig - alles paletti.
Das Problem schlägt bei einem Update zu. In der Reg findet dieses zwar den Verweis auf den Datenpfad, da das Laufwerk jedoch nicht verbunden ist, kann er dort keine Installationsdaten auslesen.
Bei ungemappten Laufwerken gibt es demzufolge auch keine Probleme.

zu 2.
Es stimmt schon, wie ich es ausgeführt habe:
- Anmeldung Benutzer mit Admin-Rechten
- Explorer geöffnet
- Batch-Datei mit net use p: \\... als Administrator ausgeführt
- im Explorer wird P: nicht angezeigt
- Setup-Programm funktioniert aber, da Administrator-Rechte angefordert werden
- Batch-Datei noch einmal ohne Administrator ausgeführt
- Explorer zeigt sofort P: an

Mein Problem besteht eigentlich nur noch darin, wie ich beim Verbinden des Netzlaufwerkes auch den Administrator einbeziehen kann.
Oder, wie ich das Laufwerk beim Ausführen des Setup intern verbinden kann.
Vielleicht gibt es noch eine Idee ...

Bbommel 25. Jun 2012 18:48

AW: Netzlaufwerk W7 64 Bit
 
Warum greifst du denn eigentlich nicht direkt auf den UNC-Pfad zu?

udo888 25. Jun 2012 18:53

AW: Netzlaufwerk W7 64 Bit
 
UNC ist eine Alternative. Bisher war das einheitliche Laufwerk jedoch optimal, da sich der "unwissende" Anwender im Servicefall besser per Telefon durch den Explorer jagen lässt.
Es wird aber wahrscheinlich auf UNC hinauslaufen müssen.

Bbommel 25. Jun 2012 18:59

AW: Netzlaufwerk W7 64 Bit
 
Ich hatte ein ähnliches Problem, da mein Programm auch oft auf irgendwelchen Netzlaufwerken schlummert und von normalen Anwendern dann immer das Verzeichnis gesucht werden musste. Mittlerweile habe ich einen Menüpunkt eingebaut, mit dem man den Windows Explorer direkt im Programm-Verzeichnis öffnen kann. Vielleicht hilft dir der Ansatz ja auch weiter.

Außerdem spricht ja nichts dagegen, dass du für den Normalfall bzw. das normale Programm ein Netzwerk-Laufwerk verbindest, das der Anwender schnell findet, und dennoch im Update-Programm über den UNC-Pfad gehst. Falls ich das Problem richtig verstanden habe. :)

Bis denn
Bommel

udo888 25. Jun 2012 21:19

AW: Netzlaufwerk W7 64 Bit
 
Danke, das ist ein Ansatz, den ich aufgreifen werde.
Ich werde einfach beim nächsten Update die Laufwerksangabe in UNC umsetzen. Das Laufwerk kann ich dann für den Service stehen lassen.

RWarnecke 25. Jun 2012 21:44

AW: Netzlaufwerk W7 64 Bit
 
Zitat:

Zitat von udo888 (Beitrag 1172372)
Mein Problem besteht eigentlich nur noch darin, wie ich beim Verbinden des Netzlaufwerkes auch den Administrator einbeziehen kann.
Oder, wie ich das Laufwerk beim Ausführen des Setup intern verbinden kann.

Falls Du immer noch nach einer Möglichkeit suchst. Bei den Schweizern habe ich dieses Beispiel gefunden. Vielleicht hilft Dir ja das.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:38 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