um vom Hauptprogramm Module nachinstallieren zu k�nnen, habe ich ein kleines
Win32 (hat nur Winmain, ohne MFC) geschrieben, welches Administratorrechte
hat und das Kopieren der Dateien �bernimmt. Es wird vom Hauptprogramm
gestartet.
Nun wird unter Windows 7 der Kompatibilit�tsmanger ge�ffnet und gesagt, dass
das Programm eventuell nicht richtig installiert sei.
Man kann dann anklicken "Ist kompatibel" und alles ist "gut".
Nur w�rde ich gerne verhindern, dass diese Meldung �berhaupt kommt.
Der Kompatibilit�tsmanger macht hier einen Eintrag:
HKEY_CURRENT_USER\Software\Microsoft\Windows
NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Persisted
Ich denke nicht, dass ich hier etwas per Software setzen sollte. Wei�
jemand, wo ich was tun muss, damit diese Meldung nicht erscheint?
Besten Dank im Voraus.
Gru�
Sven
> um vom Hauptprogramm Module nachinstallieren zu kᅵnnen, habe ich ein kleines
> Win32 (hat nur Winmain, ohne MFC) geschrieben, welches Administratorrechte
> hat und das Kopieren der Dateien ᅵbernimmt. Es wird vom Hauptprogramm
> gestartet.
Hat das Programm ein RequireAdmin Manifest?
--
Martin Richter [MVP] WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written
program is its own hell!" The Tao of Programming
FAQ: http://www.mpdvc.de Samples: http://www.codeproject.com
> Hat das Programm ein RequireAdmin Manifest?
Ja, das wurde in VC++ 2008 in den Release-Eigenschaftsseiten eingestellt
(unter Linker/Manifestdatei):
UAC- Ausf�hrungsebene: requireAdministrator.
Auch die entsprechende eingebettet Resource zeigt dies an. Alle anderen
Release-Eigenschaften wurden so belassen.
Es funktuioniert ja auch. UAC meldet sich und die Dateien werden nach
Erlaubnis korrekt kopiert.
Nach korrekter Beendigung des Programms kommt erst dieser Hinweis!
Das Program selbst ist kaum mehr als:
int _tWinMain(...)
{
CopyFile(...);
return 0;
}
Gru�
Sven
> Nach korrekter Beendigung des Programms kommt erst dieser Hinweis!
Ich vermute mal dass Programm heisst so, wie es nicht heissen darf ;)
Das sind die bᅵsen Shims.... benenn es mal um und probiere es nochmals ;)
--
Greetings
Jochen
My blog about Win32 and .NET
http://blog.kalmbachnet.de/
> Ich vermute mal dass Programm heisst so, wie es nicht heissen darf ;)
>
> Das sind die b�sen Shims.... benenn es mal um und probiere es
> nochmals ;)
Das war's :-)
Im Namen kam "install" vor. Da w�re ich nie drauf gekommen.
Gru� und Dank
Sven
>> Ich vermute mal dass Programm heisst so, wie es nicht heissen darf ;)
>>
>> Das sind die bösen Shims.... benenn es mal um und probiere es
>> nochmals ;)
>
> Das war's :-)
> Im Namen kam "install" vor. Da wäre ich nie drauf gekommen.
Ich hatte einen ähnlichen Fall, mit dem Unterschied, das mein Programm
keine Admin Rechte benötigt.
Bei mir reichte es allerdings ein Standard Manifest einzubetten. Ich hab
weder signiert, noch "update" aus der Filedescription genommen.
Das die UAC Abfrage bei deinem Programm kam, muss nichts mit dem (deiner
Aussage nach) vorhandenem Manifest zu tun haben.
Denn diese Shims bewirken ja genau dieses Prompt für Programme die kein
Manifest haben, aber auf die die Setup/Update Erkennung anschlägt.
Schau mal die exe selbst an ob ein manifest drinnen ist.
Was bei mir auch nicht der Fall war ist die Rückfrage ob richtig
installiert wurde. Da hab ich keine Ahnung wann das anschlägt.
--
lg
stefan binder
> Ich vermute mal dass Programm heisst so, wie es nicht heissen darf ;)
>
> Das sind die bᅵsen Shims.... benenn es mal um und probiere es nochmals ;)
>
> Siehe auch:
> http://blog.kalmbach-software.de/2009/06/09/custom-installer-without-warning-dialog-trustedinstallerexe/
Ich verstehe nicht warum diese Shims greifen obwohl Manifeste vorhanden
sind...
Demnᅵchst nennt man ein Programm aus diesem Grund InstHelper.exe oder
UpdHelper.exe und alles ist OK. Dann wird der Shim geᅵndert und "inst*"
"upd*" wird auch abgefangen.
Das Spielt geht solange weiter, bis die Buchstaben U und I nurnoch fᅵr
Installer Programme reserviert werden ;)
> Ich verstehe nicht warum diese Shims greifen obwohl Manifeste vorhanden
> sind...
Ich verstehe nicht, warum sie NICHT greifen sollten?
Ich konnte keine Doku finden, wo Shim mit einem Manifest NICHT wirken
sollen... das ist mir ein Rᅵtsel woher Du diese Info hast...
Dann wᅵrde ja Shims gar keinen Sinn machen...
> Demnᅵchst nennt man ein Programm aus diesem Grund InstHelper.exe oder
> UpdHelper.exe und alles ist OK. Dann wird der Shim geᅵndert und "inst*"
> "upd*" wird auch abgefangen.
Genau... das ist die Taktik von MS ;)
> Das Spielt geht solange weiter, bis die Buchstaben U und I nurnoch fᅵr
> Installer Programme reserviert werden ;)
;)
> Ich verstehe nicht, warum sie NICHT greifen sollten?
> Ich konnte keine Doku finden, wo Shim mit einem Manifest NICHT wirken
> sollen... das ist mir ein Rᅵtsel woher Du diese Info hast...
> Dann wᅵrde ja Shims gar keinen Sinn machen...
Ja und nein!
Aber wenn ich mein Programm InstallDocs nenne und irendwohin Dateien ins
User Verzeichnis kopiere und keinen Eintrag im Uninstall Bereich der
Registry mache, dann kommt gleich der Aufschrei von Windows "Das
Programm wurde nicht richtig installliert"...
Unfug in meinen Augen.
Solche Shims braucht kein Mensch... ;)
>> Ich verstehe nicht warum diese Shims greifen obwohl Manifeste
>> vorhanden sind...
>
> Ich verstehe nicht, warum sie NICHT greifen sollten?
Also ich konnte genau das beobachten...
Eines meiner Tools das noch mit VS2003 ohne Manifest erstellt wurde,
hatte in der Description unter anderem "Update" stehen.
Dadurch kam die Aufforderung ob man es als Admin ausführen möchte, wenn
es per ShellExecute gestartet wurde.
Da muss ja also dieser Shim gewirkt haben, sonst wäre ja kein Elevation
Prompt gekommen (das Programm braucht keine Admin Rechte).
Dann hab ich das Programm mit VS2008 und dem Standardmanifest (also mit
AsInvoker) erstellt, und es kam kein Elevation Prompt, sondern alles
lief wie geschmiert.
Hab grad extra nochmal diffs angeguckt, und das Manifest war die einzige
Änderung!
> Ich konnte keine Doku finden, wo Shim mit einem Manifest NICHT wirken
> sollen... das ist mir ein Rätsel woher Du diese Info hast...
> Dann würde ja Shims gar keinen Sinn machen...
Ich hab die Shims bisher als Kompatibilitätskrücke für alte Anwendungen
verstanden.
Wenn ich ein Programm mit VS2005/08 erstelle, und ein Manifest dabei
habe, kenn ich ja die Anforderungen von (zumindest) Vista schon, und
brauch diese Krücke dafür nicht.
Du hast dich sicher mehr mit dem Thema beschäftigt als ich, aber wieso
reichte bei meinem Beispiel oben dann ein Manifest hinzuzufügen aus?
--
lg
stefan binder
> Dann hab ich das Programm mit VS2008 und dem Standardmanifest (also mit
> AsInvoker) erstellt, und es kam kein Elevation Prompt, sondern alles
> lief wie geschmiert.
> Hab grad extra nochmal diffs angeguckt, und das Manifest war die einzige
> ᅵnderung!
Ja... es gibt wohl sowas... aber ich konnte noch keine Doku oder sontwas
finden, wo dies definiert wird...
Bzw. in den Shims konnte ich noch keinen Eintrag ausmachen der auf die
Manifeste achetet... aber man lernt ja immer wieder dazu...
Siehe auch:
http://blog.kalmbach-software.de/2010/02/22/the-shim-database/
> Ich hab die Shims bisher als Kompatibilitᅵtskrᅵcke fᅵr alte Anwendungen
> verstanden.
So kann man es sehen... aber man kann sie auch fᅵr neue Anwendungen
verwenden... sonst wᅵrde es ja auch kein Sinn machen, da die neuen
Anwendungen bald ja alt sind ;)
> Du hast dich sicher mehr mit dem Thema beschᅵftigt als ich, aber wieso
> reichte bei meinem Beispiel oben dann ein Manifest hinzuzufᅵgen aus?
Das frag ich mich ja auch ;)
PS: Das Verhalten ist bei mir so:
TestInstaller.exe: Ohne Manifeste
=> UAC-prompt
=> Installer-Dialog (wurde richtig installiert?)
TestInstaller.exe: Mit Manifeste und "requireAdministrator"
=> UAC-prompt
=> Installer-Dialog (wurde richtig installiert?)
TestInstaller.exe: Mit Manifeste und "asInvoker"
=> Installer-Dialog (wurde richtig installiert?)
Der "Installer-Dialog" lies sich bei mir nie unterdrᅵcken... die Frage
ist nur, wie kommt dieser Zustande... sind es die Shims oder etwas
anderes....
> Schau mal die exe selbst an ob ein manifest drinnen ist.
Habe ich nat�rlich. Damit hatte das nichts zu tun. Das Programm arbeitete ja
auch einwandfrei. Bis auf den Hinweis nach der Ausf�hrung.
Nebenbeibemerkt:
Obwohl ich gestehen muss gerade erst mit VC2008 anzufangen und den
Klassenassistenten sehr vermisse. Das Hauptprogramm wurde mit VC6.0
geschrieben wegen Streik gegen Dot-Net :-)
> Was bei mir auch nicht der Fall war ist die R�ckfrage ob richtig
> installiert wurde. Da hab ich keine Ahnung wann das anschl�gt.
Wahrscheinlich wie Martin sagte, wenn unter "uninstall" kein Eintrag in der
Registry erfolgt.
Gru�
Sven
> Der "Installer-Dialog" lies sich bei mir nie unterdrücken... die Frage
> ist nur, wie kommt dieser Zustande... sind es die Shims oder etwas
> anderes....
Dieser Dialog kam bei meiner App wiederum nie (also weder mit noch ohne
Manifest) :)
Ist aber wirklich ne minimal Anwendung, die als Aufrufparameter Files
bekommt, die es kopieren soll, und vorher prüft ob diese noch offen sind.
Falls sie offen sind, wird per Dialog aufgefordert sie zu schließen.
Das war schon alles was die "Anwendung" macht.
--
lg
stefan binder
On 2/22/2010 11:02 AM, Stefan Binder wrote:
> <snip>
> Also ich konnte genau das beobachten...
> Eines meiner Tools das noch mit VS2003 ohne Manifest erstellt wurde,
> hatte in der Description unter anderem "Update" stehen.
>
> Dadurch kam die Aufforderung ob man es als Admin ausfᅵhren mᅵchte, wenn
> es per ShellExecute gestartet wurde.
>
> Da muss ja also dieser Shim gewirkt haben, sonst wᅵre ja kein Elevation
> Prompt gekommen (das Programm braucht keine Admin Rechte).
>
Ja, das habe ich auch beobachtet, das kann ich bestaetigen. Bei uns ist
"install" im Produktnamen und daher war dieser String Teil der
Versionsinforessource. Die Folge war, dass unter Windows 7, zumindest
einem RC davon (mit Windows 7 RTM habe ich das noch nicht getestet),
immer die Rueckfrage kam nach Beenden des Programms, ob die Installation
erfolgreich durchgelaufen ist. Die Binaries hatten Manifeste und nur mit
Ausschliessen der Binaries aus den Shims liess sich das nervige
Rueckfragen abstellen. Ich werde irgendwann mal demnaechst testen, ob
das mit dem RTM auch so ist.
--
S
Kannst Du mir kurz verraten, WIE Du das gemacht hast?
>> Der "Installer-Dialog" lies sich bei mir nie unterdrᅵcken... die Frage
>> ist nur, wie kommt dieser Zustande... sind es die Shims oder etwas
>> anderes....
>
> Dieser Dialog kam bei meiner App wiederum nie (also weder mit noch ohne
> Manifest) :)
Ich bekomme solch einen Prompt auch nicht. Mein Programm heiᅵt
Setup<productname>Client.exe
RequireAdmin Manifest und das wwar es. Es werden einige DLLs kopiert
(falls nᅵtig) und einige ActiveX Komponenten registriert.
>> Dieser Dialog kam bei meiner App wiederum nie (also weder mit noch
>> ohne Manifest) :)
>
> Ich bekomme solch einen Prompt auch nicht. Mein Programm heiᅵt
> Setup<productname>Client.exe
>
> RequireAdmin Manifest und das wwar es. Es werden einige DLLs kopiert
> (falls nᅵtig) und einige ActiveX Komponenten registriert.
Habe es gerade mit einem simplen Consolen-Programm probiert:
Also nur printf und mit requireAdministrator-Manifest:
Exe-Name: SetupTest.exe
=> Installer-Dialog kommt nach beenden des Programms...
OS: Win7-x64; Programm ist x86
On 2/22/2010 2:00 PM, Jochen Kalmbach [MVP] wrote:
> Hallo Stefan!
>> Die Binaries hatten Manifeste und nur mit Ausschliessen der Binaries
>> aus den Shims liess sich das nervige Rueckfragen abstellen.
>
> Kannst Du mir kurz verraten, WIE Du das gemacht hast?
>
Einfuegen des Pfads zur Exedatei unter
HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows
NT\\CurrentVersion\\\\AppCompatFlags\\Compatibility Assistant in den
MultiSZ-Value "ExecutablestoExclude".
--
S
> Einfuegen des Pfads zur Exedatei unter
> HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows
> NT\\CurrentVersion\\\\AppCompatFlags\\Compatibility Assistant in den
> MultiSZ-Value "ExecutablestoExclude".
Ja, jetzt fᅵllt es mir wieder ein...
> Ich denke nicht, dass ich hier etwas per Software setzen sollte. Weiᅵ
> jemand, wo ich was tun muss, damit diese Meldung nicht erscheint?
Hier steht ᅵbrigens etwas ᅵber das Feature:
http://msdn.microsoft.com/en-us/library/bb756937.aspx
<quote>
It monitors a program detected as setup by Windows Vista and Windows
Server 2008 and checks whether the program registers an entry in Add or
Remove Programs (ARP). If no entries are created in ARP, PCA concludes
that the installer did not complete successfully. It will then wait for
the install program to terminate before displaying the UI. If it is an
uninstaller, the detection looks for whether an entry was deleted from ARP.
</quote>
On 2/22/2010 2:20 PM, Jochen Kalmbach [MVP] wrote:
> Hallo Stefan!
>
>> Einfuegen des Pfads zur Exedatei unter
>> HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows
>> NT\\CurrentVersion\\\\AppCompatFlags\\Compatibility Assistant in den
>> MultiSZ-Value "ExecutablestoExclude".
>
> Ja, jetzt fᅵllt es mir wieder ein...
>
Wir hatten's davon Anfang November auf der TechEd :-)
--
S
On 2/22/2010 1:47 PM, Stefan Kuhr wrote:
>
> <snip>
> Ja, das habe ich auch beobachtet, das kann ich bestaetigen. Bei uns ist
> "install" im Produktnamen und daher war dieser String Teil der
> Versionsinforessource. Die Folge war, dass unter Windows 7, zumindest
> einem RC davon (mit Windows 7 RTM habe ich das noch nicht getestet),
> immer die Rueckfrage kam nach Beenden des Programms, ob die Installation
> erfolgreich durchgelaufen ist. Die Binaries hatten Manifeste und nur mit
> Ausschliessen der Binaries aus den Shims liess sich das nervige
> Rueckfragen abstellen. Ich werde irgendwann mal demnaechst testen, ob
> das mit dem RTM auch so ist.
>
Es ist mit dem RTM genau gleich.
--
S