My company is growing to the point where customers are asking for features that may be useful to other customers and we'd generally like to be able to easily push out new versions of desktop software. The immediate choices seem to be the Application Updater block, ClickOnce, and home-rolling a solution. Since the App Updater block seems to want me to write code to determine when updates happen and such, and I'd like to avoid reinventing the wheel with a complete home grown solution, ClickOnce seems like a very good possibility. I can publish to FTP from Visual Studio, I don't have to write extra code, I can specify Full Trust, force minimum versions, firewall friendly, etc. Yes, its got a lot going for it.
My first concern was that as a mixed-technology shop, we might not be able to use ClickOnce. Our production environment is predominantly Linux and BSD based and it doesn't seem out of the realm of possibility that there might be some IIS specific functionality needed for ClickOnce to work. Luckily this is not the case, and I have an important Internal tool running with ClickOnce deployment now. To be safe I added .application and such as mime types in the Apache config but it seems only some people actually require this step. For this initial deployment I found only two irksome issues:
1) IE only. Some of the people here have Firefox set up as their default browser for some reason. Clicking on the link to the Publish.htm in their email launches Firefox which happily displays the raw Application Manifest. Cruising around MSDN I can see that this is addressed in .NET 3.0 or 3.5, which one is not clear. It would also seem likely that there is a way to register an external program-handler for .application in FireFox, but if I wanted users to have to do work I'd keep on giving them MSI files. This internal tool is also the Pilot for using ClickOnce for end-user deployments, and obviously those people would prefer things to be as easy as possible. To some degree I can cordially invite internal users to go pound sand if they think the setup is too hard but any problem my customers have, no matter how silly or made up, becomes a real problem for me.
2) Security. My apache skills are rusty. Still, I was able to setup basic auth with .htaccess files in my ClickOnce directory with only minimally bothering our sysadmin. See, I have this odd notion that if I'm going to put a public URL out there that any person could stumble on to or share with their friends, I'd like some form of authentication so I can at least tell who is sharing his password with 50 of his closest friends. Let me be explicit in that I am not looking for some type of hack-proof system, I just want the ritual of authentication and authorization to be observed here. Basic auth blows up when you try to Launch the ClickOnce app, and this is expected behavior. Supposedly NTLM is the solution: protect the resource with NTLM challenge/response, tell it to "remember me", and you're on your way. Well, not really. The sysadmin, no longer so lucky as to be only minimally burdened by my experiment, was shanghaid to track down an NTLM compatible add on for apache and cook up some form of domain to authenticate it against. We found mod_ntlm, we configured mod_ntlm against a Samba domain, we protected the test directory with mod_ntlm. As soon as I enter the domain credentials and check "Remember this password" I hit launch, to be met with the same kaboom as Basic Auth. Larry Clarkin reminded me that in the Internet Zone remember me won't work. Adding to trusted sites does not help either, at least not in my experimenting. ClickOnce has no mechanism for asking you for credentials, nor can it ask you to confirm continuing on to a site with a self-signed SSL cert, as you are sure to find ina test environment.
It seems likely that I might be able to tweak IE settings to a custom level for trusted sites, but if my users could infalliably do that task I wouldn't need ClickOnce. With so many excellent designs within .NET, it seems very odd indeed that there is no Provider Model for authentication, no Event we can respond to in order to handle self-signed test certificates. I'm trying Orcas Beta 1 this weekend, but I'm not overly optimistic.