2009-10-16 15 views
41

Utworzyłem aplikację .NET C# WinForms na Win 7 RTM x64, co powiedzmy, nazwałem DataInstaller.Asystent zgodności programów myśli, że moja aplikacja jest instalatorem

Po uruchomieniu tego programu poza debuggerem (tylko pusty formularz bez tej funkcji), działa poprawnie, dopóki nie zamknę formularza. I wtedy pojawia się komunikat z Asystent zgodności programów, które mówi:

Ten program może nie być prawidłowo zainstalowana

I wtedy się możliwość ponownej instalacji przy użyciu ustawień zalecanych lub powiedzieć, że instalacja nie działa zgodnie z oczekiwaniami.

Jeśli nazwę aplikacji "DataThingy", to nie jest problem, myślę, że jest to związane ze sposobem, w jaki programy o nazwie * Setup zyskują ikonę tarczy UAC.

Zakładam, że będzie coś prostego, co mogę umieścić w manifeście aplikacji, aby temu zapobiec?

Nie jestem pewien, czy to zdarza się w systemie Vista, ponieważ nie mam dostępu.

Zmiana nazwy nie jest opcją i wyłączenie funkcji Kontrola konta użytkownika nie jest opcją, więc nie sugeruj tego!

Edytuj:

OMG.

Wydaje się, że jeśli którykolwiek z poniższych są prawdziwe, UAC wciska swoje wiosło w:

nazwa zawiera instalator exe Word

AssemblyInfo.cs

AssemblyTitle contains the word 'Installer' 
    e.g. [assembly: AssemblyTitle("DataInstaller")] 
AssemblyProduct contains the word 'Installer' 
    e.g. [assembly: AssemblyProduct("Data Installation Utility")] 

'Instalatora' może również być "Setup".

To żebrak wierzy, to naprawdę robi. Oczywiście jeden ze starych programistów VB6 został przeniesiony do zespołu UAC w Redmond.

Nadal potrzebuję obejścia, nie jestem gotów zaakceptować, że moja aplikacja nie może być nazwana instalatorem, ponieważ nie dotyka ona rejestru ani nie umieszcza żadnych plików w folderze Program Files.

Zakładam, że UAC spowodowałoby całkowite zablokowanie maszyny, gdybym próbował wykonać moją aplikację o nazwie IAmAVirus.exe. (Właściwie, nie śmiem tego wypróbować, ponieważ nie jestem całkowicie przekonany, że jestem po prostu głupi)

+3

W rzeczywistości system Windows po prostu sprawdza nazwę pliku dla takich słów, jak "setup" lub "install", aby określić, czy coś jest instalatorem, czy nie. Tak, to głupie ... Czy można coś z tym zrobić? Zastanawiam się ... Dobra Q, chociaż. –

+0

Mam nadzieję, że tak, ponieważ to wszystko jest trochę zbyt "magiczne stringy" dla mojego gustu .. dziękuję za głosowanie! – Carl

+2

@Wim - Nie, wydaje się być AssemblyTitle tak, jak sugeruje post. Zweryfikowano na moim komputerze Win7 SP1 dla PackageInstaller.exe - nie ma problemu, jeśli tytuł zestawu jest PackageNstaller –

Odpowiedz

41

Dodaj to do swojego manifestu.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    <application> 
    <!--The ID below indicates application support for Windows Vista --> 
    <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
    <!--The ID below indicates application support for Windows 7 --> 
    <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> 
    <!--The ID below indicates app support for Windows 8 --> 
    <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/> 
    <!--The ID below indicates app support for Windows 8.1 --> 
    <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> 
    </application> 
</compatibility> 

Identyfikatory GUID dla wszystkich systemów operacyjnych w poprzednim przykładzie zapewniają wsparcie w dół poziomu. Aplikacje obsługujące wiele platform nie potrzebują osobnych manifestów dla każdej platformy.

Zaczerpnięte z App (executable) manifest.

+0

Działa jak urok, nawet po wdrożeniu w ProgramFiles! Dzięki Justin. – Carl

+1

Nie zrobiło to żadnej różnicy, gdy próbowałem ... moje narzędzie nazywa się "ccsetup", ponieważ zastępuje ono oryginalne narzędzie ustawień o tej nazwie, ale tak długo, jak nazwa lub wersja mają słowo "setup" w to, śmieci kompatybilności ciągle pojawiają się. Po usunięciu problem natychmiast znika, ale nie chcę, aby miał inną nazwę. – Nyerguds

+4

{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38} dla systemu Windows 8. Więcej informacji: http://msdn.microsoft.com/en-us/library/windows/desktop/hh848036(v=vs.85).aspx – mjb

3

Podobnie jak w przypadku warsztatu Alex będzie zgadywał na podstawie nazw plików.

Ale czy próbowałeś dodać plik manifestu? To pozwala na określenie, jakie prawa dostępu są potrzebne do uruchomienia aplikacji.

MSDN on how to create one from Visual studio Kolejny artykuł linku, który zawiera help.

+1

Po prostu dodanie manifestu sprawiło, że trik (chociaż próbowałem tego przed opublikowaniem tego, szczerze mówiąc!). Aby uzyskać więcej informacji, zobacz: http://blogs.msdn.com/cjacks/archive/2009/06/18/pca-changes-for-windows-7-how-to-tell-us-you-are -not-an-installer-take-2-bo-we-changed-the-rules-on-you.aspx i http://technet.microsoft.com/en-us/library/dd638326%28WS.10%29 .aspx. Dzięki. – Carl

+0

Jako aktualizacja nie, to nie zadziałało. Gdy tylko exe zostanie wdrożony w innej lokalizacji, na przykład , PCA ponownie wychowuje swoją paskudną głowę. – Carl

+1

Stare pytanie, ale nazwa pliku brzmiała, co robiłem dla mnie. Zmieniono instalator na narzędzie i działało dobrze. Dzięki za wskazówkę @EKS – DTown

2

Po prostu miałem ten problem i skończyłem naprawianie go, upewniając się, że mój tytuł zespołu w pliku AssemblyInfo.cs i nazwa zespołu mojego pliku cs.proj są zgodne. Kiedy nie były zsynchronizowane, to wyrzucał ten błąd, czyniąc je tym samym, co spowodowało, że zniknęło. Nie jestem pewien, czy ma to zastosowanie do twojej sytuacji, ale sam błąd w podobnych okolicznościach, może warto spróbować i uniknąć zaakceptowanej odpowiedzi ignorowania błędu razem.

+0

To jest dokładnie ten problem, z którym miałem do czynienia. Dziękuję za wskazanie tego człowiekowi, mimo że padło pytanie. Myślałem, że to były oczywiste ustawienia, ale zmieniłem nazwę 'Assembly name' we właściwościach projektu i nie pasowało do' Default namespace'. – strider

Powiązane problemy