views:

857

answers:

2

I have created a .NET C# WinForms application on Win 7 RTM x64, which let's say I have called DataInstaller.

When I run this program outside of the debugger (just an empty form with no functionality at the moment), it works fine until I close the form. I then get a message from the Program Compatibility Assistant that says:

This program might not have installed correctly

I then get the option to reinstall using recommended settings or to say that the install did work as expected.

If I name the app 'DataThingy' this isn't an issue, I guess this is related to the way that programs called *Setup gain a UAC shield icon.

I assume that there will be something simple that I can put in the application manifest to prevent this?

I'm not sure if this occurs on Vista as I don't have access currently.

Changing the name is not an option and turning off UAC is not an option so please don't suggest this!

Edit:

OMG.

It seems that if any of the following are true, UAC sticks its oar in:

Exe name contains the word 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' can also be 'Setup'.

It beggars belief, it really does. Obviously one of the old VB6 programmers got relocated into the UAC team over at Redmond.

I still need a workaround, I'm not prepared to accept that my application can't possibly be an called an installer because it doesn't touch the registry or put any files in the Program Files folder.

I assume that UAC would put the machine into total lockdown if I tried to execute my application called IAmAVirus.exe. (Actually, I daren't try it because I'm not entirely convinced that I'm just being silly)

+3  A: 

Like Workshop Alex will make a guess based on filenames.

But have you tried to add a manifest file ? That allows you to spesify what access rights you need to be run the application.

MSDN on how to create one from Visual studio Another link article that help.

EKS
Just adding the manifest did the trick (although I did try that before posting this, honest!). For a bit of further info, see: 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-because-we-changed-the-rules-on-you.aspx and http://technet.microsoft.com/en-us/library/dd638326%28WS.10%29.aspx. Thanks.
Carl
As an update, no, this didn't work. As soon as the exe gets deployed to another location, such as <Program Files> the PCA rears its ugly head again.
Carl
Old question but the filename was what was doing it for me. Changed installer to tool and it worked fine. Thanks for the tip @EKS
DTown
+7  A: 

add this into your manifest.

<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}"/>

  </application>

</compatibility>

Justin
Works like a charm, even when deployed to ProgramFiles! Thanks Justin.
Carl