MichaelDev
ASP.Net Fusion Log Viewer
A neat little thing our ASP.Net expert showed me...
The Fusion Log Viewer utility. Fusion is the technology name that is used for downloading .Net components to the GAC (your Windows\assembly\download directory).
If you want to see more of what's going on with download components on ASP.Net pages, this can be a helpful too. Just run
fuslogvw.exe (use the VS.Net command prompt so it's already on your path).
By default, the
Log Failures checkbox is not checked. It's a good thing to check if you're trying to find out what's going on with downloaded components. Double-click on the application entry and it opens a detailed log of what's going on.
InstallShield Eval
I tried out the
InstallShield X demo. I found the UI even less intuitive than
Wise Installer for Windows. I don't really like either of them. Don't think I've met anyone who does. It's really amazing how complicated you can make simple concepts like installing software.
The amusing (and annoying) thing about InstallShield X is that it installs an automatic update service on your computer. This thing prompts you to periodically check for updates to your installed software. When I decided I didn't want to deal with InstallShield X anymore, I removed the software. And guess what? This annoying automatic update service stays behind, periodically reminding you to check for updates to the software you no longer have installed.
At least I can tell this auto update thing to no longer check for updates. Even then, it periodically puts an icon in the system tray to bother me about updating my non-existent software.
Now the real funny part that shows their true level of incompetence: I still have my eval support login, so I raised an issue about this auto-update thing that wasn't removed. It turns out the people at InstallShield don't even know how to remove it!!! It's on someone's list of things to figure out how to do. And these people specialize in installing and removing software. Do you want to trust your installation to people who can't figure it out themselves?
An then, because my support issue was over 5 days old and they hadn't figured out how to do it, they just decided to mark my support indicent as "resolved" and close it. I guess that means some support guy is getting his bonus now for promptly resolving customer issues. Once they've closed an issue, you can't even re-open it. You can just make a new issue and refer to the old one. A sure-fire way to warp your customer service metrics in your favor, isn't it?
Microsoft Security Summit
The Microsoft Security Summit recently came through Anaheim.
Brian Valentine was the keynote speaker. It was strange to see him in a coat and tie. I'm more used to seeing him in a hockey jersey.
The developer track was pretty good.
Michele Leroux Bustamante presented the developer track. It was nice to have someone present who actually does what she's presenting. Sometimes the presenters at these Microsoft things are just people who got the speaker kit.
Win32 resources from .Net / Resource-Only DLL
Unfortunately, the VS.Net languages such as C# don't let you create conventional resources like you could from the C/C++ compiler. So, if you want a resource-only DLL, you have to go to C++ and build it there.
Microsoft has an article on the proper steps to go through to do this in the VS.Net IDE:
Creating a Resource-Only DLL
Of course, if you want conventional Win32 resources in an assemly, you can do it by invoking RC and taking the result and doing some other command line somewhere. I haven't needed to do that yet. I'm content with a resource-only DLL right now.
This is useful for things like installers and other OS features that don't know how to find resources in assemblies. In our case, it's convenient for getting a certain icon in the add/remove programs control panel and some other things.
Microsoft CSP and Keys with Multiple Users
We use the AssemlyKeyNameAttribute attribute in our AssemblyInfo files to set our private key. It looks like this:
[assembly: AssemblyKeyNameAttribute("MyKey")]
To use it, you store the key (in this case "MyKey") in the CSP on your machine. When your assembly gets built, it uses the key from the CSP.
We have automated builds (using Visual Build Professional from
Kinook -- awesome tool!!!). As part of the process, it installs the key into the CSP. So, if you've ever done a "sn -i" operation and seen a message like this, keep reading:
Failed to install key pair -- Object already exists.
This message was very puzzling for a while. We knew the key didn't exist, but we were receiving this message. So, we tried deleting the key with "sn -d".
You get the following:
Failed to delete container 'MyKey' -- Unable to format error message 8013141C
How's that for a vague message?
So we know it failed. Finally, we figured out that the key did exist on the machine, but it was put into the CSP by a different user. We had to log on as that user and delete the key. and then we could add it under a different user.
Incidentally, you get the same message if you try to delete a key that doesn't exist:
Failed to delete container 'MyKey' -- Unable to format error message 8013141C
So that's not necessarily a clue that the key exists under a different user. It just tells you something went wrong and not why.
Microsoft really needs to iron this out. Ideally, each user on a machine should be able to save the same key name to the CSP separate from any other user and it shouldn't conflict. If that's not the case, then they CSP should be for the machine, not each user. What we have is a really strange hybrid that can cause headaches.