I mentioned in an earlier post that applications with manifests that require Administrator privileges will show up with an overlay icon of the shield on their exe icon in Windows Explorer. Applications with manifests that deny needing Administrator privileges will not get the icon. What about applications without manifests? Well, among other things some Vista heuristics come into play. I found some really old executables (15 year old games) and did a little experiment. Obviously these are manifestless apps. I copied Tetris.exe and renamed the copy Setup.exe. That's all I did. The timestamp is still unchanged. But there's a fairly obvious difference as a result of the rename:

If the file name contains Setup, Patch, or some other magic strings then you will get the overlay and you will be prompted for elevation consent when you run it. (If you're curious, Tetris plays just the same elevated.) Then something fun happens. After you run a file called Setup.exe, if your program files directory is unchanged, your registry is unchanged, your System32 directory is unchanged etc, something is probably wrong. Well, not if you're just playing Tetris, but if the plan was to install something, there's a good chance it didn't install. So Vista says:

If you let it try again, it actually uses Group Policy to store extra information about this application - including whether it needs to elevate or not, should be lied to about Windows version, and other settings you can find on the Compatibility tab of the properties:

Why do you care? You care if Vista has wrongly guessed that an app of yours needs to elevate, and prompts you every time. Understanding these heuristics gets you closer to being able to clear away that overlay icon for your not-administrative-at-all application.

How can you avoid the UAC prompt for applications you frequently run? Well, you could turn off UAC entirely, but that's a bad plan. There are two ways: one is realistic and feasible, and one much less so.

The less feasible one is that you could re-enable the Administrator account (not just some account you happen to have that is in the Adminstrators group, but the actual Administrator account) and log on as that. Pretty much everything you do will be elevated and you won't be prompted about it. But I don't want to do that. I want to log on as me. Plus, I kind of want to control my prompt-noprompt life, or we're right back to malware using my powers without me knowing.

So here's my solution. Get yourself an elevated command prompt (Start menu, spot a command prompt shortcut, right click, Run as Administrator.) Consent once and for all (till your next boot) to elevating that prompt. Now everything you launch from there is elevated, no prompt. Don't believe me? Try regedit. Try notepad. Then try, say, editing your hosts file with that notepad. Cool, no?

Leave the elevated command prompt open, and use it whenever you want to do something elevated. No prompting. You have to type the name of the app (Visual Studio is devenv, which you will care if you're still using 2005.) But pretty painless.

If you've ever watched Star Trek: The Original Series you know it had a trope or a meme where an "away team" would beam down to the planet and suddenly one of them would be killed. Usually vapourized or dragged off by a yeti or somesuch. And as my four year old once said to me "Red people fall down. Not red people don't fall down." This is also known as the redshirt phenomenon. To this day, when I see three main characters (on any show) plus some guy we've never seen before, someone is sure to call that guy out as a red shirt just as the suspenseful music starts to rise.

Well, Matt Bailey has run the math. Are red-shirted crewmen more likely to die than yellow or blue shirts? Indubitably. But - is it good news or bad news, redshirt-wise, if the episode also features what I've always referred to as Kirk putting his boots on, though strictly speaking he does that after the plot point Matt refers to as "meeting" alien women. See how some solid data analysis and well chosen visuals can truly illustrate the redshirt phenomenon on Star Trek, at least for TOS. The powerpoints alone are worth the click.

Have you seen the Deep Zoom example with the Hard Rock Cafe artifacts? It's pretty darn cool. If you don't have Silverlight and would like to see why it's cool, there's a video on the Mix blog. But I love the zooming into Virtual Earth example I was just sent. It's a CodePlex project, so you can be part of it. It can take a while to load so be patient. I showed it to someone who said that Google Earth did that, but requires downloading and installing an application. If you already have Silverlight, you don't need anything else to use this. I like that.

I've been carrying this link around for a while and it seems like a good time to share it. Rico Mariani knows a LOT about performance and why it's important. And he knows that many of us no longer care. We trust optimizers and runtimes and frameworks and auto-caches and such to take care of things for us. Sometimes, we're right to do that. Other times, we're not. Thinking about games will naturally make you think about performance.

One of the questions I got in the booth at Tech Ed was about First Chance Exceptions. The attendee was getting these messages in the output window in Visual C++ warning about "first chance exception" and was concerned about it. A long-long-neglected neuron fired. I think I ran an article in a journal I edited 10 or so years ago in which Mike Blaszczak covered this. And I think the bottom line was "don't worry." So I ran a quick search and found this knowledge base article that indeed says "don't worry." The debugger gets the exception first, before your code. It just writes to the screen that it got it. Then your code handles the exception and life goes on as before. If your code doesn't handle the exception, then the debugger gets it again, and then perhaps something interesting happens. But first chance exceptions are nothing.

UAC prompts you whenever you do something that requires your administrator privileges, with a couple of exceptions I'll get to later. Part of not being driven crazy by UAC is coming to expect that prompt. When you choose particular menu items or click particular buttons, you are warned with the shield:

What lots of people don't spot is that some executables are also marked with the shield. Compare these two:

One of these will get you a UAC prompt if you run it, and one won't. Once you know to look for it, it's easy to see -- at least down in the properties area with the big thumbnail. Look closely at the little icon in the main part of the window (the icon you would double click) and you'll see it, too.

What puts that icon there? What suppresses that icon? Well these two executables have manifests. One says the exection level is asInvoker and the other says requireAdministrator. So that's a pretty obvious distinction. There are other things that put the overlay there, but thery all boil down to this: if Vista plans to show you a UAC prompt (and there are reasons other than a manifest why it might) it will overlay the icon to warn you.

Remember, though, that the icon on menus and buttons and such is not magically put there by the OS. It's put there by a thoughtful programmer who likes users to know what's going on. The same sort of programmer who puts ... on menu items that will bring up a dialog (take a look at File, Save in almost any program) and omits ... on menu items that will just act (such as File, Close.). If you're programming for Vista, you need to be that kind of programmer.

In addition to the talks with C++ in the title (3 of them) and with C++ or a related word in the abstract (3 more) I listed in an earlier posting, I spotted this in a Tech Ed deck:

Heh. That sure isn't C#. What talk is it?

MBL302 Building Windows Mobile Applications That Work with Windows Vista Sync Center

The new Sync Center in Windows Vista will become the hub for all data synchronization between the PC, Mobile Devices, and online services. Take a closer look at the development framework, as well as the end-user experience that Sync Center helps create. This session dives into the code you need to write in order to plug your application into the Sync Center user interface. If you're writing an application for Windows today that has any synchronization components, you should not miss this session.

The speaker has a blog entry that states his pro-C++, pro-COM position unambiguously:

This is easy, this is Windows software development like it has been for at least 10 years. It is well defined, well known and well supported...go and learn C++ and COM, it is how many of the Windows Vista features are exposed to developers and with good reason. If you are not prepared to learn how to program your computer then you should question why you are in the software development business.

I think easy might be an overstatement, but I do certainly agree that "old style" programming techniques still have real value in the Vista universe. Keep your skills sharp!