Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Windows 7 - Programmatically configure a application to run in XP compatibility mode

Tags:

windows-7

My application needs administrative access and I want it to run without any hassles in Windows 7.

I have the following options

1.Ask the user using the application to turn off UAC. This is a last resort option and would hate to do that.

2.Embed a manifest in the application that says elevate to adminstrator privelege. This will work but it seems that it will bring up a dialog requiring users consent every time a user runs the application.

3. Configure the application to run in Windows XP compatibility mode. This works, but i had to do this using explorer->application properties. if can I do this programmatically during installation time, I would really prefer this option. My question is if there is any way to achieve this.

regards

Ganesh

like image 838
Ganesh Avatar asked Aug 13 '09 18:08

Ganesh


2 Answers

Try making an application compatibility shim that says your app needs the XP compatibility mode, and distributing it with your app. A shim is a means for administrators to simplify installation of a 3rd party app that needs compatibility settings - it saves them tweaking each PC individually. You can probably roll it into your install program with a little ingenuity.

like image 162
MarkJ Avatar answered Nov 06 '22 07:11

MarkJ


I've gotten pretty used to dealing with the UAC dialog, running Vista for the last 2 years. If it bugs you, I have to wonder how much experience you have using post-XP OS'es.

As a user I think there are two ways to look at it:

  1. The program inherently requires admin. For these, I very much appreciate the dialog, as I know it means nobody's going to sneakily run that thing in the background on me and modify my system.
  2. The program inherently does not require admin. Most programs only need admin to auto-update themselves (and probably shouldn't need it then). My attitude is that these programs are poorly-designed. Such a program should only invoke AUC if it discovers it needs to update, not every single frigging time I start it up. This is a security issue too, as any buffer overflow someone finds in the entire program puts me at risk.

Localize the need for UAC as much as you possibly can. The best would be to put in a separate executable. (eg: an "updater")

like image 2
T.E.D. Avatar answered Nov 06 '22 09:11

T.E.D.