2009-10-16 13 views
41

Ho creato un'applicazione .NET C# WinForms su Win 7 RTM x64, che diciamo che ho chiamato DataInstaller.Assistente compatibilità programmi pensa che la mia app sia un installatore

Quando eseguo questo programma all'esterno del debugger (solo un modulo vuoto senza funzionalità al momento), funziona correttamente finché non chiudo il modulo. Allora ottengo un messaggio dalla compatibilità programmi che dice:

Questo programma non sia stato installato correttamente

Allora ottengo l'opzione per reinstallare utilizzando le impostazioni consigliate o di dire che l'installazione ha funzionato come previsto.

Se nome l'app 'DataThingy' questo non è un problema, immagino sia correlato al modo in cui i programmi denominati * Setup ottengono un'icona di scudo UAC.

Suppongo che ci sarà qualcosa di semplice che posso inserire nel manifest dell'applicazione per impedirlo?

Non sono sicuro se questo si verifica in Vista perché attualmente non ho accesso.

Cambiare il nome non è un'opzione e disattivare il controllo dell'account utente non è un'opzione, quindi non suggerire questo!

Modifica:

OMG.

Sembra che se uno dei seguenti sono vere, UAC attacca il suo remo:

nome Exe contiene la parola Installer

AssemblyInfo.cs

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

'Installer' può anche essere 'Setup'.

La credenza mendicante, lo fa davvero. Ovviamente uno dei vecchi programmatori VB6 è stato trasferito nel team UAC a Redmond.

Ho ancora bisogno di una soluzione alternativa, non sono disposto ad accettare che la mia applicazione non possa essere chiamata un programma di installazione perché non tocca il registro o inserisce alcun file nella cartella Programmi.

Suppongo che l'UAC avrebbe messo la macchina in blocco totale se ho provato a eseguire la mia applicazione denominata IAmAVirus.exe. (In realtà, non lo provo perché non sono del tutto convinto di essere solo sciocco)

+3

In realtà, Windows controlla solamente il nome del file per parole come "setup" o "install" per determinare se qualcosa è un programma di installazione o meno. Sì, è stupido ... Si può fare qualcosa al riguardo? Mi chiedo ... Buona Q, però. –

+0

Lo spero, perché è tutto un po 'troppo magico per i miei gusti .. grazie per il voto! – Carl

+2

@Wim - No, sembra essere AssemblyTitle come suggerisce il post. Verificato sulla mia macchina Win7 SP1 per PackageInstaller.exe - nessun problema se il titolo assembly è PackageNstaller –

risposta

41

Aggiungi questo nel tuo manifest.

<?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> 

I GUID per tutti i sistemi operativi dell'esempio precedente forniscono supporto di livello inferiore. Le app che supportano più piattaforme non necessitano di manifesti separati per ogni piattaforma.

Tratto da App (executable) manifest.

+0

Funziona come un fascino, anche se distribuito su ProgramFiles! Grazie Justin. – Carl

+1

Questo non ha fatto alcuna differenza quando l'ho provato ... il mio strumento si chiama "ccsetup" poiché sostituisce lo strumento delle impostazioni originali con quel nome, ma finché il nome o le informazioni sulla versione hanno la parola "setup" in esso, la spazzatura di compatibilità continua a spuntare. Quando lo rimuovo, il problema scompare immediatamente, ma non voglio che abbia un nome diverso. – Nyerguds

+4

{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38} per Windows 8. Ulteriori informazioni: http://msdn.microsoft.com/en-us/library/windows/desktop/hh848036(v=vs.85).aspx – mjb

3

Come il laboratorio Alex farà un'ipotesi basata sui nomi dei file.

Ma hai provato ad aggiungere un file manifest? Ciò consente di spesificare quali sono i diritti di accesso necessari per eseguire l'applicazione.

MSDN on how to create one from Visual studio Un altro articolo di collegamento che help.

+1

Aggiungendo semplicemente manifest hai fatto il trucco (anche se l'ho provato prima di postarlo, onestamente!). Per ulteriori informazioni, vedere: http://blogs.msdn.com/cjacks/archive/2009/06/18/pca-changes-for-windows-7-how-to-tell-us-you-are -non-un-installer-take-2-perché-abbiamo-cambiato-le-regole-su-you.aspx e http://technet.microsoft.com/en-us/library/dd638326%28WS.10%29 aspx. Grazie. – Carl

+0

Come aggiornamento, no, questo non ha funzionato. Non appena l'exe viene distribuito in un'altra posizione, ad esempio , il PCA alza nuovamente la sua brutta testa. – Carl

+1

Vecchia domanda ma il nome del file era quello che stava facendo per me. Installatore modificato per lo strumento e ha funzionato bene. Grazie per il suggerimento @EKS – DTown

2

Ho appena avuto questo problema e ho finito per risolverlo assicurandomi che il mio titolo assembly all'interno del file AssemblyInfo.cs e il nome dell'assembly del mio file cs.proj corrispondessero. Quando non sono stati sincronizzati, questo errore è stato generato, il che li ha resi la stessa causa della sua scomparsa. Non sono sicuro se si applica alla tua situazione, ma lo stesso errore di circostanze simili, potrebbe valere la pena di provare ed evitare la risposta accettata di ignorare l'errore tutti insieme.

+0

Questo è esattamente il problema che stavo affrontando. Grazie per averlo fatto notare, anche se alla domanda è stata data una risposta. Stavo pensando che fossero le impostazioni manifest, ma avevo cambiato il 'Nome assembly 'nelle proprietà del progetto e non corrispondeva allo' Spazio dei nomi predefinito'. – strider

Problemi correlati