NET mentor and consultant who lives in the hills of Vermont. You can find Julie presenting on data access and other topics at user groups and conferences around the world. Julie blogs at thedatafarm. Follow Julie on twitter at julielermanvt.
|Published (Last):||16 July 2015|
|PDF File Size:||12.20 Mb|
|ePub File Size:||1.54 Mb|
|Price:||Free* [*Free Regsitration Required]|
NET mentor and consultant who lives in the hills of Vermont. You can find Julie presenting on data access and other topics at user groups and conferences around the world. Julie blogs at thedatafarm. Follow Julie on twitter at julielermanvt. After four years of trying out every iteration of Web server application deployment that Microsoft created for. NET, ClickOnce has finally allowed me to succeed in deploying one particularly complex smart client application.
But I still had to tear a few more hairs out before I got it working and came to love ClickOnce. What I will do in this article is talk about some of the specific deployment issues I ran into and how I solved them. It is nearly a typical MDI application that hosts child forms in a window. The atypical feature is that the child forms are loaded dynamically based on user selection. I designed the application so I can add new forms over time by merely dropping a new DLL into the application folder; the application itself has no built-in knowledge of these forms or their assemblies.
This is a critical point of departure for the ClickOnce model and its predecessors which uses System. Reflection to analyze the application and determine what goes into the deployment package. But the DLLs containing my child forms are not referenced.
It took a number of times through this manual process of building the manifest before it became second nature to me and I no longer dread providing updates. You may wonder what to do with those versioned deployment manifests in the main folder. The purpose of these is so that you can do a server-side rollback.
For example, if you are up to version 1. It is up to you to choose whether or not to retain the manifest version files.
If you do, simply make a copy of the manifest file after it is created and give it the appropriate name. In my scenario, the Web server that my deployments live on is not in my office. I have medium speed DSL. My full application with all of the dynamic assemblies is now about 12 MB. I am a woman of very little patience, you see. So I finally figured out a more efficient way to deploy my application.
Rather than do all of the manifest updates on my own computer, I finally smartened up and am doing them on the Web server. Therefore, the only files I need to transfer to the server are the ones that changed. You will have to prepare the complete manifest locally and then FTP the new folder and files up to your Web server.
Another option, still copying all of the files, is to use the remote publishing that ClickOnce offers.
I have found this to be too complex and too filled with caveats. An acceptable solution would be to allow any user to install the application, but have the client application authenticate the user by means of Web services at activation. I was not happy when I read that. In fact, I wrote a long rant in my blog about this limitation.
The driving reason behind my persistence to make this technology work for nearly four years is to enable remote employees who do not have access to or accounts on the domain to be able to easily install and update the application.
This recommendation looked like a serious show-stopper. My application already uses Web services and WS-Security for authentication. Therefore, even if someone could install the application, they cannot use the application without appropriate credentials.
NET 2. NET files. The file extensions for your manifests. Therefore, by default, ASP. NET will serve these files up without authenticating, just as they would an image file. NET rules. Therefore, if you want your non-ASP. The following instructions describe how to do this with IIS6. See the Further Reading sidebar for a link to more detailed information.
The fact that ClickOnce does not have the ability to automatically install desktop shortcuts to the application becomes a problem with this same group of users. But if your users install from a Web site with the manifests, then it definitely is. One reason is that it requires your application to have full trust.
By default, applications deployed with ClickOnce only have partial trust and you should set them to full trust only with a good understanding of what you are doing. My client specifically requested that I do this as part of their installation and frankly, they trust me even more than they trust ClickOnce. Adding the desktop shortcut is not part of the ClickOnce deployment.
It is a function of the application that you are deploying. Listing 1 shows my DesktopShortcut class with two methods. One determines if the shortcut already exists.
The other creates it. The methods are shared, so the class does not need to be instantiated. The basis for this class came from an article by Les Smith. This is a rude solution that just slams the shortcut on the desktop without asking if the user wants it or not.
If the user deletes the shortcut, the application will just re-create it on next startup. A more polite approach would be to check for the existence of the shortcut and then ask the user if they want it installed or not. You could also choose to leverage the IsFirstRun property of the System.
Application class. This way you only create the shortcut the first time the user runs the application. If the user deletes the shortcut, it will not get re-created by the application.
Go print it out and staple it to the end of this article and read it when you are finished here. I struggled with a number of things before I had a better understanding how ClickOnce works. If you take a look at the path of the file that the shortcut is pointing to, you may have a small fainting spell as one my clients did. The versions of my custom application are also maintained in the cache as updates are downloaded. NET Framework and other common pieces such as third-party tools or your own custom APIs that get shared across applications, only need to be installed once and will be available to all users.
This issue really bugged me, but, in fact, the progress bar does not tell the whole story! ClickOnce needs to create a completely new version folder for each update. ClickOnce will determine which files are new and copy only those files down from the Web server. Figure 6 shows you where it is in my version. The internal people hit the Web server through the local network while the remote people are coming in over the Web through an ISA Server.
They had a proxy problem identified by the Show Details link in the ClickOnce error dialog that prevented them from getting at the manifests. Figure 7 shows this dialog box. After years of publicly documented frustration with early iterations of technologies that evolved into ClickOnce, I have finally found ClickOnce to be the tool I needed. The fact that people are writing entire books on the topic says a lot about the depth of this technology.
My Subscriber Account Advertise Write. Training Home Classes Mentoring State of. Staffing Home Looking for Staff?
Looking for Work? Contact Us. Dark Kimbie. This article was published in:. This article was filed under: Build and Deploy Web Development general. In Windows Explorer, browse to the directory that contains the new Web application.
Figure 1 shows what a simple deployment folder contains. Copy all of the extra assemblies from your project files right into this new folder. In the new folder, locate the Application Manifest file e. See Figure 2. On the Files form, click Populate to re-populate the file list. When asked, I allow it to add the. It may ask about individual files, as well. Notice in the lower left corner of the windows, you will see it counting through all of the files it is adding or re-adding into the list.
Frequently, when I do the population, the program shuts itself down. No worries. Just open it up, remember to fix the Version, and then run the Populate function again.
How to: Create file associations for a ClickOnce application
As we rebuild Microsoft Edge atop the Chromium open-source platform, we are working through various scenarios that behave differently in the new browser. One example of a behavioral gap is related to running ClickOnce apps. See the end of this post. ClickOnce is a Microsoft application deployment framework that aims to allow installation of native-code applications from the web in around one click. Installation prompt when opening an. Such files launch correctly from Internet Explorer and pre-Chromium Edge, but fail in Firefox and Chrome with an error message:.
How to: Include a data file in a ClickOnce application
ClickOnce applications can be associated with one or more file name extensions, so that the application will be started automatically when the user opens a file of those types. Adding file name extension support to a ClickOnce application is straightforward. Find the assembly element. For more information, see ClickOnce application manifest.
ClickOnce for the Real World, Not Hello World