Zapobiegaj podniesieniu uprawnień (UAC) dla aplikacji, która go nie potrzebuje [duplikat]

34

To pytanie ma już odpowiedź tutaj:

Niedawno przeprowadziłem migrację z Vista 32bit na Windows 7 64bit, jeden z moich programów wymaga teraz uprawnień administratora.

Używam raczej egzotycznego edytora tekstu (Crimson Editor). Chociaż nie został zaprojektowany dla Vist / Win7, działał dobrze z Vistą. Ale w systemie Windows 7 plik wykonywalny programu dodaje tę osłonę UAC do swojej ikony (mimo że flaga „Uruchom jako administrator” na karcie zgodności nie jest ustawiona) i wyświetla monit o podniesienie uprawnień za każdym razem, gdy go uruchamiam.

W jaki sposób Win7 określa, że ​​ta aplikacja przypominająca notatnik potrzebuje uprawnień administratora? Jak mogę zastąpić tę fałszywą heurystykę?

SealedSun
źródło

Odpowiedzi:

22

Nie, powodem, dla którego Crimson Editor to robi, NIE jest to, że jest niepodpisany. (I to nie jest nowość w Win7). Jest tak, ponieważ określa manifest aplikacji, który jest osadzony w czasie kompilacji requestedPrivilegeLevel="highestLevel".

Zgodnie z tym postem na forum , twórcy Crimson Editor zmienili to w wersji 237-241. Zrobili to, ponieważ funkcja „Dodaj edytor szkarłatny do powłoki menu kontekstowych” wymaga uprawnień administratora.

Długoterminową poprawką byłoby, aby programiści Crimson Editor poprawili manifest aplikacji. Powinny dodać się do menu kontekstowego powłoki podczas instalacji lub przynajmniej powiedzieć użytkownikom, że muszą ręcznie uruchomić aplikację z podwyższonym poziomem uprawnień (co jest łatwe do zrobienia) zamiast tego wymagać.

W przypadku wszystkich aplikacji z requestedPrivilegeLevel="highestLevel"ich manifestem (użyj Manifest View, aby wyświetlić manifesty aplikacji), możesz użyć narzędzia Microsoft Application Compatibility Toolkit, aby zastąpić aplikację poprawką RunAsInvoker, która wymusza uruchomienie aplikacji ze standardowymi tokenami użytkownika.

Aby uzyskać więcej informacji na temat korzystania z zestawu narzędzi do sprawdzania zgodności aplikacji, zobacz ten post na temat stosowania go w aplikacji Crimson Editor lub ogólne instrukcje .

the.d.ro
źródło
1
Alternatywnie możesz zastąpić istniejący manifest za pomocą narzędzia wiersza polecenia mt.exe, które możesz bezpłatnie pobrać z Visual Studio Express (z długim czasem, ale warto, jeśli często napotykasz ten problem). Pamiętaj, że zastąpienie osadzonego manifestu zmieni plik .exe, więc a) upewnij się, że masz jego kopię na wypadek, gdybyś coś złamał oraz b) jeśli został podpisany, złamiesz podpis (ale wydaje się, że w tym przypadku masz już ustalono, że i tak jest niepodpisany).
AdamV
the.d.stro, jesteś ratownikiem, działa świetnie.
obrzęk
1
+1 za „popraw ich aplikację” i za pomocą zestawu narzędzi AppCompat naprawić za nich błędy.
Ian Boyd
13

Odkryłem, że miałem dwie aplikacje, które miały ten problem. Jeden miał „aktualizację” w nazwie pliku, a drugi „aktualizację” w „FileDecsription”. Po prostu usunąłem słowo „aktualizacja” z tych dwóch aplikacji i nie ma już ostrzeżeń UAC. Znalazłem informacje w części „Jak działa UAC” - „Wykrywanie instalatora” pod adresem:

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

Który stwierdza, co następuje:

Wykrywanie instalatora dotyczy tylko:

  • 32-bitowe pliki wykonywalne
  • Aplikacje bez żądaniaExecutionLevel
  • Interaktywne procesy uruchomione jako użytkownik standardowy z włączoną funkcją UAC

Przed utworzeniem procesu 32-bitowego sprawdzane są następujące atrybuty w celu ustalenia, czy jest to instalator:

  • Nazwa pliku zawiera słowa kluczowe takie jak „zainstaluj”, „konfiguracja” i „aktualizacja”.
  • Słowa kluczowe w następujących polach zasobów kontroli wersji: dostawca, nazwa firmy, nazwa produktu, opis pliku, oryginalna nazwa pliku, nazwa wewnętrzna i nazwa eksportu.
  • Słowa kluczowe w manifestie aplikacji side-by-side osadzonym w pliku wykonywalnym.
  • Słowa kluczowe w określonych wpisach StringTable połączone w pliku wykonywalnym.
  • Kluczowe atrybuty danych pliku zasobów połączone w pliku wykonywalnym.
  • Ukierunkowane sekwencje bajtów w pliku wykonywalnym.

  • Uwaga: słowa kluczowe i sekwencje bajtów zostały wyprowadzone ze wspólnych cech zaobserwowanych w różnych technologiach instalatora.

Piękno
źródło
7

Jeśli masz program Visual Studio, możesz wykonać następujące czynności:

  1. Otwórz Visual Studio jako administrator.
  2. Naciśnij Ctrl-O, aby otworzyć plik
  3. Przejdź do folderu, w którym znajduje się Crimson Editor i otwórz cedt.exe
  4. Plik zostanie otwarty za pomocą edytora zasobów, a zobaczysz drzewo z gałęzią o nazwie RT_MANIFEST, rozwiń to i kliknij dwukrotnie pozycję pojedynczego dziecka o nazwie „1 [English United States]”
  5. Około trzech czwartych drogi w prawej kolumnie zobaczysz requestExecutionLevel poziom = „najwyższy dostępny”, zmień „najwyższy dostępny” na „asInvoker” (uwaga: edytor domyślnie otwiera się w trybie nadpisywania).
  6. Zapisz plik i gotowe.

HTH

Kevan

kevanb
źródło
4

Istnieje kilka informacji na temat heurystyki tutaj: http://msdn.microsoft.com/en-us/library/aa905330.aspx

Manifest może pomóc kontrolować niektóre z tych rzeczy.

AaronLS
źródło
MSDN mówi o „osadzaniu” manifestu. Czy to nie jest zrobione podczas kompilacji programu? Czy muszę sam skompilować Crimson Editor, aby uzyskać tam taki manifest?
SealedSun
5
Możesz dodać plik filename.exe.manifest w tym samym folderze, a system Windows odpowiednio go odczyta.
Factor Mystic