I have spent about a month doing whack-a-mole with bugs associated with snapins in MMC 3.0. On top of this, Microsoft has basically abandoned it. I haven't been able to get MMC 3.0 working with .NET 4.0 (developers have reported some workarounds, but none have worked for me). That's it, I had it!
Been working really hard on PainlessSVN, as I still use it to manage all my repositories. I've been trying to add a bunch of features that I want, as I despise managing Subversion with the command-line. MMC just keeps getting in my way.
I'm investigating moving PainlessSVN over to WPF, MVVM, and CSLA. CSLA is a business framework, and it has remote access baked in. It does a good job of hiding the complexities of WCF from the programmer.
This means that PainlessSVN 2.0 will not be released this year, and it will not be a MMC 3.0 snapin.
I was in the process of updating both PainlessSVN Professional and Console to version 1.2.1, when I found a bug in Visual Studio 2010 debugger. The solutions for both projects were in VS2008. My OS recently died, so I had to re-install it from scratch. I only installed VS2010, because I wanted to move away from VS2008.
My first hint that something was wrong was when I needed to modify the About dll to include the new version numbers and years in the copyright. This project is a C++ resource dll. This simple project would not compile on the VS2010 compiler when I converted it. I ended up firing one of my VMWare images that has VS2008 to get this done.
The next thing that happened was that none of the breakpoints I set worked, while trying to track down an unhandled exception. I went to Google and found that this is a known bug. The report is over here:
Debugging an MMC snapin does not attach correctly to mmc.exe
The suggested work around is here:
Can’t hit breakpoints in a plug-in or can’t debug .NET 2.0/3.0/3.5 from a mixed mode .exe project with Visual Studio 2010?
Unfortunately, that didn't work for me. What did work was to change the mmc.exe instance from the C:\Windows\SysWow64 to the one in C:\Windows\System32, then attach the debugger manually. The debugger will not attach to instances of the mmc.exe program in the SysWow64 directory. I am running VS2010 on Windows 7 Ultimate x64, and that's why I was using the 64 bit version of mmc.exe.
Anyways, hope this helps somebody else.
I was doing a code spike to see if I could get .NET 4 to work with MMC 3.0. All my attempts failed. I googled a bit, and it looks like I'm not the only one.
In a nutshell, you might get lucky, but for the most part it doesn't work.
Here's a post on StackOverflow:
Here's the official response from Microsoft:
Stuff like this is what makes it very hard to trust Microsoft as a developer.
I just finished fixing some bugs, and put finishing touches on PainlessSVN 1.1.0. This has been long in coming, and I'm very happy with the results. I am now concentrating on the installation script and testing it in different versions of Windows. I'm hoping that this takes no longer than a week (hopefully, less than that). I will reset the trial, so that people who have previously downloaded, can trial again.
Here are few screenshots of the new UI in Windows 7 Ultimate x64:
Justin (who didn't leave a last name) left a comment on how to debug MMC 3.0 snapins in Windows 7 x64 and Visual Studio 2008. I want to put this on its own blog post, so that I can find it easier. I'll just repost Justin's comment here:
I recently struck this problem with VS2008 on Windows 7 x64 as well.
I eventually found a solution :)
The solution is to directly use the 32 bit version of mmc at this path:
C:\Windows\SysWOW64\mmc.exe rather than the one in System32.
you still need the -32 flag as in your screenshot.
When you try and debug via "C:\Windows\System32\mmc.exe -32" what actually happens is the debugger attaches to the 64bit version which starts the 32bit version(in SysWOW64) and then closes itself hence why it stops debugging immediately.
You can start the snapin that you are debugging on the command line. This is extremely convinient. Here's a screenshot with Justin's findings:
This is on the project's properties page, on the "Debug" tab.
Now, if I could just figure out how to get the keyboard shortcuts back. They disappeared a couple days ago, and haven't been able to get them back. *boggle*
I've done a bit more work on the server dashboard. I'm concentrating on what I think I can release relatively soon, so I removed a few things that were not ready for 1.1.
Here is the dashboard when it can't find a Windows service for svnserve.exe:
This will be tweaked a bit more to indicate when a version of Subversion is too old to have native support for Windows services.
Here is the initial look when the dashboard finds that there is a running instance of the svnserver.exe Windows service:
Here is the same view, but with the panel expanded:
PainlessSVN will now be able to start or stop the Windows service, if it has enough security rights to interact with it. There are some instances where PainlessSVN won't be able to acquire a reference to the service, if the target machine is different from the one PainlessSVN is running on.
Here is a screenshot with the dashboard detecting that the service is installed, but not running:
Ok, the last UI was bad even it being just a test. The colors were just clashing badly, and it was mostly an eyesore. I promise I won't inflict that on the world at large.
I did a lot of tweaks and tests, and came up with what I think is a winner. I still want to put more information on the screen, but I believe this will be the general layout from now on. Here are screenshots:
I'm following Vista UI as my guide. Less is definitely more in this case.
I been looking for how to present the information about the server in the server view. I kept going back to the UI for the Security Center in Windows XP. I couldn't find any controls out there that would mimic the controls in the Security Center. Again, I turned to my friend, Brandon Dobbie, and he created an expandable panel with functionality very similar to the ones in the Security Center.
This control has not been released yet. I'm doing private testing for him right now. He created this control in less than a day. It's still not ready for public consumption, but I'm very happy with the results so far.
Here's a screenshot with a Subversion server that has svnserve installed as a Windows Service:
Here's a screenshot with a Subversion server that does not have svnserve installed as a Windows Service:
This version of the server info view is a lot closer to the vision that I have for it. This is not the final form, but it is very close to it.
Brandon is building a couple more custom controls for me. These controls are mostly Vista and Windows 7 specific, but they should work with Windows XP.
I asked my good friend, Brandon Dobbie, if he could come up with something for a non-MMC PainlessSVN client. He did an excellent job, as always. He's a UI wizard, and if you need to fix your UI, he's the guy to talk to. Here's what he came up with:
I thought that I could use some of this for the server node view. After some pounding on the keyboard, I came up with something not quite as good as his, but good enough for the current MMC version of PainlessSVN. Here's a screenshot of a Subversion server that is installed as a windows service:
I'm still having some issue with images on Windows XP. The next screenshot is on Vista Ultimate 64-bit and Subversion server is not installed as a service:
I'm a very visual guy, and I really enjoy posting screenshots. This is one way to help me keep track of my progress. I know a lot of developers like to work in secrecy, but I'm not one of them. At least I don't think I work in total secrecy. Hope you are enjoying my journey through improving PainlessSVN as much as I am.
I just got done coding the new UI elements for user tasks. Here is what it looks like when you click on a user node for the first time:
Here is when you click the "Umask" button:
Here is when you click on the "Change Password" linkbutton:
The Save button becomes active once the passwords match:
Here is when the passwords get unmasked by clicking on the "Unmask" button:
I'm giving most of the nodes on the treeview on the left, this same treatment. It will make the different command available without having to sweat it out. Version 1.1.0 is shaping up very nicely.
I had to really dig in with the object browser to see how to use Winforms in the result pane. The samples in the MMC 3.0 SDK didn't come close to show how to pass external data to the view. Google didn't turn up any answers, but thankfully, it only took me a couple hours to figure out. I'm hoping to have a blog post with code ready around Saturday.