Process Start Sicherheitsabfrage

mdo

Mitglied
Hallo!
Ihr kennt doch betsimmt diese nervige Sicherheitsabfrage, wenn ihr eine ausführbare Datei aus dem Web das erste Mal ausführen wollt, oder?
Ich bin gerade dabei ein Setup Projekt aufzubauen und starte dementsprechend ganz viele ausführbare Dateien mit Process.Start()... Dieses Setup soll auch einen "Silent" Modus beinhalten, welcher dem Benutzer die einzelnen Setup Dialoge ersparen soll. Der Benutzer klickt in meinem Setup einmal auf installieren und das Setup Projekt installiert dann mehrere Programme und meldet sich erst wieder, wenn alles fertig ist.
Nun gibt es aber das Problem mit dieser nervigen Sicherheitsabfrage... Wenn ich im Silent-Modus eine ausführbare Datei mit Process.Start aufrufen will, dann erscheint erst eine Sicherheitsabfrage, welche der Benutzer absegnen muss...
Kann ich das unterdrücken? Oder diese Datei dem System als "OK" unterjubeln? Es handelt sich quasi um die Funktion des "Zulassen" Buttons, welcher in den Eigenschaften einer unbekannten ausführbaren Datei im ersten TAB zu finden ist. Nach Betätigen dieses Buttons, ist die Datei im System als "OK" markiert und es ist nie mehr eine Sicherheitsabfrage fällig...

Hat sich damit schonmal jemand rum geärgert und kennt eventuell ne Lösung dafür? ich hab schon einige Zeit im netz nach einer Lösung gesucht, bin aber gescheitert... Ich weiß nichtmal genau was ich in Google eintippen soll...

MfG
mdo
 
Hallo!

Diese Warnung kommt, da ein "Alternate Data Stream" namens "Zone.Identifier" bei der Date hinterlegt ist. Entfernst du diesen, kommt auch die Warnung nicht mehr.

Hier findest du das ganze nochmal erklärt, und am Ende des Beitrags steht auch wie du mit dieser Bibliothek diesen Stream via Code entfernen kannst.

lg,..
 
  • Gefällt mir
Reaktionen: mdo
Hi,

ist es wirklich die Meldung die man bei heruntergeladenen Dateien sieht oder ist es die Benutzerkontensteuerung (ab Windows Vista)?

Gruß
RudolfG
 
@RudolfG
Es ist die Meldung die bei heruntergeladenen Daten aufpoppt. Für den Installationsfall gehe ich davon aus, dass ich Admin-Rechte habe. Aber dennoch:
Ich programmiere unter WinXP und zum Einsatz wird das Setup wohl unter Win2003 - Win2008 in 32bit und 64bit Varianten kommen. Muss ich die Benutzerkontensteuerung beachten wenn ich Adminrechte besitze? kann das leider hier nicht ohne Weiteres testen...
 
Bei den genannten OS nicht, bei >= Vista kommt ein Prompt in dem man, auch als Administrator, den Start/die Ausführung zulassen muss.
 
Win2008 (Windows Server 2008) ist >= Vista...
Kann man diesen Dialog unterdrücken? Ich erinnere mich zB an die Möglichkeit eine ausführbare Datei explizit als Administrator auszuführen, egal ob man schon Adminrechte hat oder nicht. Dann dürfte diese Meldung nicht mehr auftreten, richtig? Wenn ja, wie tue ich das?
 
Hoi..

Du kannst entweder via Manifest festlegen, das deine Anwendung Adminrechte braucht.. (Test 2: Request administrative rights.)

..oder direkt via Code: Test 4: Elevation as needed (in code).

Könnte bei einer Winforms Anwendung so aussehen:
C#:
using System;
using System.Windows.Forms;
using System.Security.Principal;
using System.Diagnostics;
using System.ComponentModel;

namespace TestAnwendung
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            WindowsPrincipal pricipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
            bool hasAdministrativeRight = pricipal.IsInRole(WindowsBuiltInRole.Administrator);

            if (!hasAdministrativeRight)
            {
                if (!RunElevated(Application.ExecutablePath))
                {
                    // ggf Hinweis ausgeben, und Programm beenden..
                }

                Application.Exit();
                return;
            }

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

        private static bool RunElevated(string fileName)
        {
            ProcessStartInfo processInfo = new ProcessStartInfo();
            processInfo.Verb = "runas";
            processInfo.FileName = fileName;
            try
            {
                Process.Start(processInfo);
                return true;
            }
            catch (Win32Exception)
            {
                //Do nothing. Probably the user canceled the UAC window
            }
            return false;
        }
    }
}
teilw. Quelle

lg,..
 

Neue Beiträge

Zurück