Announcement

Collapse
No announcement yet.

Zugriff auf Programmverzeichnis unter Win7

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zugriff auf Programmverzeichnis unter Win7

    Hallo,

    wir nutzen hier eine im Unternehmen entwickelte Software, die auch permanent Änderungen erfährt, es gibt regelmäßig neue Versionen. Um dieses Programm auf allen Rechner aktuell zu halten, wird es über eine weitere kleine Applikation gestartet, welche davor aber auf dem Server nachschaut, ob es eine neue Version gibt. Ist diese vorhanden, wird diese in das Programmverzeichnis kopiert und anschließend gestartet. Auf diese Weise brauchen wir uns über die Verteilung der Updates keine Gedanken zu machen, das funktioniert seit Jahren recht gut ... bis wir jetzt Windows 7 einsetzen.

    Sollen unter Win7 Dateien ersetzt werden, kommt die Fehlermeldung "Der Zugriff auf den Pfad ... wurde verweigert". Was kann ich tun? Ich könnte die kleine Startapplikation als Administrator aufrufen, müsste dann aber immer diese Aktion mit einem weiteren Klick bestätigen, was nicht sehr anwenderfreundlich ist. Ich könnte wohl auch die Benutzerkontensteuerung ausschalten, was aber wohl auch alles andere als optimal ist.

    Welche Möglichkeiten habe ich noch? Ideal wäre es, wenn man das Programm normal startet, es dann aber kurzfristig die notwendigen Rechte erhält, in das Programmverzeichnis kopieren zu dürfen. Ist so etwas machbar?

    Ich bin für jeden Hinweis oder Tip dankbar. Was kann man tun?

    Danke ...

    Dave

  • #2
    Originally posted by Dave_Bowman View Post
    Auf diese Weise brauchen wir uns über die Verteilung der Updates keine Gedanken zu machen, das funktioniert seit Jahren recht gut ... bis wir jetzt Windows 7 einsetzen.
    Diese Lösung funktioniert seit Windows NT nicht. Einfach mal von einem Anwender starten der nur in der Gruppe Gäste/Benutzer ist und nicht in der Gruppe Hauptbenutzer

    Originally posted by Dave_Bowman View Post
    Was kann ich tun? Ich könnte die kleine Startapplikation als Administrator aufrufen, müsste dann aber immer diese Aktion mit einem weiteren Klick bestätigen, was nicht sehr anwenderfreundlich ist.
    As Designed seit Vista.

    Originally posted by Dave_Bowman View Post
    Ideal wäre es, wenn man das Programm normal startet, es dann aber kurzfristig die notwendigen Rechte erhält, in das Programmverzeichnis kopieren zu dürfen. Ist so etwas machbar?
    Nein

    Originally posted by Dave_Bowman View Post
    Welche Möglichkeiten habe ich noch?
    realisier den Updater als NT-Dienst welcher dann in einem entsprechende Konto läuft welche auch Netzwerkzugriff hat.

    Oder mach es einfach: Lass die Anwendung immer von Netzwerklaufwerk starten. Wenn das Firmennetz nicht gerade langsam ist dürfte das keine Verzögerungen verursachen.

    Comment


    • #3
      Hallo Bernhard,

      Danke schonmal für die Tipps. Ist natürlich Mist, die bisherige Lösung war so praktisch wie komfortabel. Man brauchte sich als Anwender eben um nichts kümmern und hatte immer die aktuelle Version laufen.

      Vom Netzlaufwerk aus starten geht leider auch nicht, die Applikation ist mittlerweile über 4MB groß, und sie wird auch über UMTS mit VPN benutzt, da kann ich sie nicht immer wieder neu downloaden lassen, das dauert zu lange.

      Blöde Frage: wie würde man einen Dienst anlegen? Einfach einen Timer programmieren, der regelmäßig (müsste ja alle 30 Sek. sein) abfragt, ob gerade Zugriff auf den Update-Server besteht und wenn ja, das Programm noch nicht geladen ist? Denn erst unter diesen Voraussetzungen kann ja das Programm aktualisiert werden. Und wie kann er dann installiert werden, sodass er gleich die erforderlichen Rechte hat? (Habe noch nie einen Dienst programmiert. Kann jemand einen hilfreichen Tutorial-Link beisteuern?)

      Ach Scheiß, das war so bequem mit XP. Und jetzt sieht das nach einer Menge Arbeit aus.


      Dave

      Comment


      • #4
        Ok, kommt spät, aber eventuell hilft's ja. Das Problem besteht ja bekanntlich nur aus 3 Buchstaben: UAC! ...und dazu gibt's verschiedene Ansätze:



        a) UAC im Manifest mit einbetten (aus "asInvoker" mach "requireAdministrator") - nur braucht das Programm dann immer die Zustimmung des Benutzers und läuft immer mit UAC-Rechten; also in diesem Fall wohl unschön

        Code:
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
        EDIT: Sowas wäre aber für nen separaten Updater ein Ansatzpunkt. Update gefunden -> Updater starten

        b) UAC-Berechtigungen zur Laufzeit anfordern (find's aber grad nirgends - irgendwo hab ich das mal in nem Projekt implementiert - wenn ich nur wüsste welches Projekt das war oder wie das genau ging, dann könnt ich dir gleich nen Code beisteueren, aber Google sollte das schon finden )

        c) Das Programm sich selbst neu starten lassen mit nem Parameter, der dem neugestarteten Programm sagt dass es mit UAC-Rechten neu gestartet wurde - unschön ohne Ende, aber funktioniert. Der Trick liegt im Verb. Hier ein Beispiel:

        Code:
        internal static void RestartElevated()
                {
                    ProcessStartInfo startInfo = new ProcessStartInfo();
                    startInfo.UseShellExecute = true;
                    startInfo.WorkingDirectory = Environment.CurrentDirectory;
                    startInfo.FileName = Application.ExecutablePath;
                    startInfo.Arguments = "/ElevatedRestart";
                    startInfo.Verb = "runas";
                    try
                    {
                        Process p = Process.Start(startInfo);
                    }
                    catch (Exception)
                    {
                        return;
                    }
        
                    Application.Exit();
                }

        Edit - noch ein Nachtrag: im elevated Modus kennt Windows keine Netzlaufwerke mehr - dolle Sache, sollte man bedenken!
        Zuletzt editiert von ENNEMMEE; 17.05.2010, 16:30.

        Comment


        • #5
          Originally posted by ENNEMMEE View Post
          b) UAC-Berechtigungen zur Laufzeit anfordern (find's aber grad nirgends - irgendwo hab ich das mal in nem Projekt implementiert - wenn ich nur wüsste welches Projekt das war oder wie das genau ging, dann könnt ich dir gleich nen Code beisteueren, aber Google sollte das schon finden )
          Stich wäre hier COM für die Elevation. Siehe auch EDN. Ein schon laufenden Prozess kann man nicht Adminrechte geben. Das ging mal bis XP aber dieser Ansatz birgt zu viele potentielle Sicherheitslücken.

          Ich glaube nicht das du mit Delphi viel anfangen kannst. Aber das Stichwort COM + der Beitrag sollte dir Helfen entsprechende .NET-Beispiele in der MSDN zu finden.

          Originally posted by ENNEMMEE View Post
          Edit - noch ein Nachtrag: im elevated Modus kennt Windows keine Netzlaufwerke mehr - dolle Sache, sollte man bedenken!
          Windows kennt die Netzwerklaufwerke schon, jedoch läuft der elevated Prozess mit einer anderen Benutzerkennung/Session-ID. Und für diese wurden die Netzlaufwerke nicht verbunden. Das Verhalten ist aber auch schon immer so (z.B. "sehen" Dienste die mit lokalen Konto laufen auch nicht die Netzwerklaufwerke de angemeldeten Benutzer.

          Comment


          • #6
            Würde es sich nicht empfehlen das Programm einfach auf einen Webserver zu veröffentlichen ? Bei jedem start des Programms wird dann geschaut, ob die Version noch aktuell ist und falls sie das nicht ist wird die aktuelle Version heruntergeladen. Wenn die Anwendung noch aktuell ist wird einfach die lokale Variante gestartet. Machen wir bei uns in der Firma so.

            Gruß,
            Romano

            Comment


            • #7
              Der Grund ist UAC
              Kenne die Probleme ...
              Da hast Du folögende Möglichkeiten :
              Das dümmste ... UAC abschalten ...
              - Mit Zertifikaten arbeiten

              - Programm über den Aufgabenplaner starten ( Aufgabe mit Anmeldeinformationen anlegen ... mit dem entsprechenden Programm )

              - mit Impersonator.vb ( musste mal google ... )

              Beispiel mit der Impersonator.vb :


              [highlight=vbnet]

              ' Login Variable - werden für die Funktion ausführen als benötigt
              Dim DomainName As String = "*****"
              Dim UserName As String = "*****"
              Dim Password As String = "******"


              'Passwort-Eingabe
              Dim imp As New RunAs_Impersonator
              Try
              imp.ImpersonateStart(DomainName, UserName, Password) 'creates new context using token for user

              '################################################# ###########################################
              'everything between ImpersonateStart and ImpersonateStop will be run as the impersonated user
              ... hier ist Dein Programm ...

              imp.ImpersonateStop()
              Exit Sub
              End Try
              [/highlight]

              Comment


              • #8
                Originally posted by Thomas Stönner View Post
                - mit Impersonator.vb ( musste mal google ... )
                Wäre mir neu das ab Vista ein laufender Prozess Adminrechte anfordern kann. Afaik geht das nur bis XP.

                Comment

                Working...
                X