Jak poprosić o uprawnienia administratora podczas uruchamiania programu?

81

Potrzebuję mojego oprogramowania, aby móc działać jako administrator w systemie Windows Vista (jeśli ktoś uruchomi je bez uprawnień administracyjnych, ulegnie awarii).

Podczas uruchamiania innego oprogramowania system wyświetlał komunikat typu „To oprogramowanie będzie działać jako administrator. Czy chcesz kontynuować?” gdy aplikacja próbowała uzyskać uprawnienia administracyjne.

Jak zażądać uprawnień administratora podczas uruchamiania aplikacji C # w systemie Windows Vista?

Arsen Zahray
źródło
6
Proszę nie zapominać, że wykonanie tej czynności tylko ukrywa podstawowy problem, ale go nie rozwiązuje. Nawet jeśli Twój program naprawdę potrzebuje uprawnień administratora, nie powinien ulec awarii, jeśli ich nie otrzyma. Najbardziej prawdopodobną przyczyną jest niepowodzenie sprawdzenia stanu błędu po wywołaniu systemowym.
Harry Johnston,

Odpowiedzi:

143

Dodaj do swojego pliku manifestu:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

Możesz również użyć highestAvailabledla poziomu.

Spójrz tutaj na osadzanie plików manifestu:

http://msdn.microsoft.com/en-us/library/bb756929.aspx

PS: Jeśli nie masz pliku manifestu, możesz łatwo dodać nowy:

W programie Visual Studio kliknij prawym przyciskiem myszy projekt -> Dodaj element -> Wybierz plik manifestu aplikacji (w obszarze Ogólne dla elementów programu Visual C #)

Dodany plik będzie już zawierał powyższą część, wystarczy zmienić poziom na requireAdministratorzasInvoker

manojlds
źródło
2
Warto wspomnieć, że jeśli w ten sposób dodasz plik manifestu aplikacji w VS, otrzymasz tam szablon z wieloma innymi opcjami (na przykład, mówiąc, że twoja aplikacja działa tylko w systemie Windows 10 i nowszych). Testowane na VS2017.
Per Lundberg
@PerLundberg - Nie warto o tym wspominać, ponieważ oryginalny Ask-er nie pytał o to - zapytał o uprawnienia administratora
Momoro
3
@Momoro Pytania dotyczące SO są nie tylko dla PO, ale dla większej korzyści społeczności. Inne osoby mogą znaleźć to pytanie, szukając innych rozwiązań, nie tylko dokładnie o to , o co pytał PO. Ogólnie rzecz biorąc, nauczanie ludzi o tym, że „możesz to zrobić za pomocą manifestów aplikacji” nie zaszkodzi.
Per Lundberg,
Nie sugerowałem niczego niegrzecznego (przepraszam, że natknąłem się w ten sposób) Po prostu czytałem stare odpowiedzi / pytania i trochę się zdezorientowałem: D
Momoro
14

Umieść ten XML w pliku o nazwie yourexename.exe.manifest:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
   <security>
     <requestedPrivileges>
        <requestedExecutionLevel level="highestAvailable" />
     </requestedPrivileges>
   </security>
</trustInfo>
</assembly>
Steve Danner
źródło
-1

W przypadku programu F # Visual Studio 2013, w tym plik manifestu, który żąda podniesienia uprawnień administratora przy użyciu flagi kompilatora FSharp w /win32manifestnastępujący sposób, działał dla mnie. Tak więc, mając dane wyjściowe projektu o nazwie „App.Exe”

  1. Utwórz plik z następującą zawartością (dla wygody możesz dodać plik do projektu. Upewnij się, że jest Build Actionto None' andCopy to Output ... isNie kopiuj . By convention such a file is named App.Exe.manifest`. Jeśli potrzebujesz uiAccess (User Interface), zestaw musi mieć silną nazwę.

    <?xml version="1.0" encoding="utf-8" ?>
    <asmv1:assembly manifestVersion="1.0" 
        xmlns="urn:schemas-microsoft-com:asm.v1"
        xmlns:asmv1="urn:schemas-microsoft-com:asm.v1"
        xmlns:asmv2="urn:schemas-microsoft-com:asm.v2"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <assemblyIdentity version="1.0.0.0" name="App" />
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
          <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
            <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
          </requestedPrivileges>
        </security>
      </trustInfo>
    </asmv1:assembly>
    
  2. Edycja dialogu projekt budować panelu Other flags:pole wprowadzania aby zaliczyć: /win32manifest:<ApplicationManifestFile>. Na przykład w tym przypadku /win32manifest:App.Exe.manifest.

George
źródło