Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ClickOnce setup.exe fails, but the .application file works fine when using a Windows share for deployment

Tags:

I am getting the error of System.Deployment.Application.DeploymentDownloadException when I try to run setup.exe for my ClickOnce application. If run it over the network from its original location it works fine, but if I copy setup.exe from the path on the server I get the error

Can not download application. The Application is missing required files.

I need the setup as it installs some prerequisites (.NET 4) that the end user may not have.

Clicking the details button from the error window gives the following information:

PLATFORM VERSION INFO     Windows             : 6.1.7601.65536 (Win32NT)     Common Language Runtime     : 4.0.30319.237     System.Deployment.dll       : 4.0.30319.1 (RTMRel.030319-0100)     clr.dll             : 4.0.30319.237 (RTMGDR.030319-2300)     dfdll.dll           : 4.0.30319.1 (RTMRel.030319-0100)     dfshim.dll          : 4.0.31106.0 (Main.031106-0000)  SOURCES     Deployment url          : file:///C:/Users/srchamberlain/Downloads/ContractFlowTool.application  ERROR SUMMARY     Below is a summary of the errors, details of these errors are listed later in the log.     * Activation of C:\Users\srchamberlain\Downloads\ContractFlowTool.application resulted in exception. Following failure messages were detected:         + Downloading file:///C:/Users/srchamberlain/Downloads/ContractFlowTool.application did not succeed.         + Could not find file 'C:\Users\srchamberlain\Downloads\ContractFlowTool.application'.         + Could not find file 'C:\Users\srchamberlain\Downloads\ContractFlowTool.application'.         + Could not find file 'C:\Users\srchamberlain\Downloads\ContractFlowTool.application'.  COMPONENT STORE TRANSACTION FAILURE SUMMARY     No transaction error was detected.  WARNINGS     There were no warnings during this operation.  OPERATION PROGRESS STATUS     * [8/16/2011 12:23:26 PM] : Activation of C:\Users\srchamberlain\Downloads\ContractFlowTool.application has started.  ERROR DETAILS     Following errors were detected during this operation.     * [8/16/2011 12:23:26 PM] System.Deployment.Application.DeploymentDownloadException (Unknown subtype)         - Downloading file:///C:/Users/srchamberlain/Downloads/ContractFlowTool.application did not succeed.         - Source: System.Deployment         - Stack trace:             at System.Deployment.Application.SystemNetDownloader.DownloadSingleFile(DownloadQueueItem next)             at System.Deployment.Application.SystemNetDownloader.DownloadAllFiles()             at System.Deployment.Application.FileDownloader.Download(SubscriptionState subState)             at System.Deployment.Application.DownloadManager.DownloadManifestAsRawFile(Uri& sourceUri, String targetPath, IDownloadNotification notification, DownloadOptions options, ServerInformation& serverInformation)             at System.Deployment.Application.DownloadManager.DownloadDeploymentManifestDirectBypass(SubscriptionStore subStore, Uri& sourceUri, TempFile& tempFile, SubscriptionState& subState, IDownloadNotification notification, DownloadOptions options, ServerInformation& serverInformation)             at System.Deployment.Application.DownloadManager.DownloadDeploymentManifestBypass(SubscriptionStore subStore, Uri& sourceUri, TempFile& tempFile, SubscriptionState& subState, IDownloadNotification notification, DownloadOptions options)             at System.Deployment.Application.ApplicationActivator.PerformDeploymentActivation(Uri activationUri, Boolean isShortcut, String textualSubId, String deploymentProviderUrlFromExtension, BrowserSettings browserSettings, String& errorPageUrl)             at System.Deployment.Application.ApplicationActivator.ActivateDeploymentWorker(Object state)         --- Inner Exception ---         System.Net.WebException         - Could not find file 'C:\Users\srchamberlain\Downloads\ContractFlowTool.application'.         - Source: System         - Stack trace:             at System.Net.FileWebRequest.EndGetResponse(IAsyncResult asyncResult)             at System.Net.FileWebRequest.GetResponse()             at System.Deployment.Application.SystemNetDownloader.DownloadSingleFile(DownloadQueueItem next)         --- Inner Exception ---         System.Net.WebException         - Could not find file 'C:\Users\srchamberlain\Downloads\ContractFlowTool.application'.         - Source: System         - Stack trace:             at System.Net.FileWebResponse..ctor(FileWebRequest request, Uri uri, FileAccess access, Boolean asyncHint)             at System.Net.FileWebRequest.GetResponseCallback(Object state)         --- Inner Exception ---         System.IO.FileNotFoundException         - Could not find file 'C:\Users\srchamberlain\Downloads\ContractFlowTool.application'.         - Source: mscorlib         - Stack trace:             at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)             at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath)             at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)             at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean useAsync)             at System.Net.FileWebStream..ctor(FileWebRequest request, String path, FileMode mode, FileAccess access, FileShare sharing, Int32 length, Boolean async)             at System.Net.FileWebResponse..ctor(FileWebRequest request, Uri uri, FileAccess access, Boolean asyncHint)  COMPONENT STORE TRANSACTION DETAILS     No transaction information is available. 

The root of the problem is it is trying to download its files from the same path as setup.exe is run from (file:///C:/Users/srchamberlain/Downloads in this case) instead of the actual deployment URL (\\fs1\contractflowtool)

I have seen a few solutions, but all of them tell me the solution is to change the MIME type on IIS. IIS is not installed on the server that is hosting the files.

What else can be done to fix this besides "change the MIME types"?


UPDATE

See the second post in this thread for some test cases I ran. The summary is: it appears that the setup.exe file uses the working directory to download its files as it works fine when I run the EXE file over the network, however it fails if I copy the EXE to my local disk.

How do I resolve this issue other than "Tell people to just run it from the network path"?


UPDATE2: Looking at the setup.exe file with a hex editor, I could not find my install path anywhere in it. When I changed the install path to http://example.com/Test I was able to find it easily.

Is it a Visual Studio bug that it does not save the publishing location/install path if you are using a UNC path?

like image 364
Scott Chamberlain Avatar asked Aug 16 '11 17:08

Scott Chamberlain


People also ask

What is the difference between ClickOnce deployment and Windows Installer deployment?

Windows Installer deployment requires administrative permissions and allows only limited user installation; ClickOnce deployment enables non-administrative users to install and grants only those Code Access Security permissions necessary for the application.

How do I clear my ClickOnce cache?

To delete the ClickOnce file cache, delete the contents of this folder based on the operating system. Deleting these files will clear the information for all installed ClickOnce applications. They'll reinstall the next time their shortcut or Uniform Resource Identifiers (URIs) are used.

How do I debug ClickOnce application?

To debug this, simply attach before the button is pressed, then set a breakpoint (make sure that you open the appropriate archived file and set the breakpoint there). Use the IsNetworkDeployed property to invoke the System. Deployment.

How do I ClickOnce deployment?

In the Publish wizard, select Folder. In the Specific target page, select ClickOnce. Enter a path or select Browse to select the publish location. In the Install location page, select where users will install the application from.


2 Answers

The way I understand it, the Setup.exe file doesn't contain your application; it's just how Visual Studio installs prerequisites, and then it runs your .application file to actually install your application.

I tested this out with one of my own applications. First, I copied just setup.exe over and got the same error you did:

ERROR SUMMARY     Below is a summary of the errors, details of these errors are listed later in the log.     * Activation of C:\Users\Andy\Desktop\Video Uploader.application resulted in exception. Following failure messages were detected:         + Downloading file:///C:/Users/Andy/Desktop/Video Uploader.application did not succeed.         + Could not find file 'C:\Users\Andy\Desktop\Video Uploader.application'.         + Could not find file 'C:\Users\Andy\Desktop\Video Uploader.application'.         + Could not find file 'C:\Users\Andy\Desktop\Video Uploader.application'. 

Then I copied the Video Uploader.application over to my desktop too and it worked. So it seems like if you want to install it from somewhere other than the network share, you just need to make sure that it has both files.

Other things to check, if you don't have it downloading the prereqs from the venders website, then make sure that it is pointing to a static place, or at least make sure that you copy those files over too.

In the Publish Wizard, on the How will users install the application? page, I selected From a CD-ROM or DVD-Rom. I don't know if selecting either of the other two options might change how it works.

Edit:
I read through your other post. I suspect that it has to do with how the different protocols handle files. I was able to get it working from the publish.html page, but I actually published it to a webserver, so that the page address was http://www.example.com/programs/publish.html.

I tried running it from n:\webroot\programs\publish.html, and it failed.

Do you have a way to publish it to a webserver? Or at least install IIS or Apache to make it into a webserver?

Alternately, just make sure that everyone has the prerequisites, and then have them click the launch link:

Enter image description here

Edit 2:

Here is my publishing setup. It works by clicking on the install button in Internet Explorer, Firefox, and Chrome (all I tested).

Enter image description here

Enter image description here

It seems like the setup file is looking at the website for the .application file, so that it doesn't need to be on the local computer.

Edit 3:

In Windows (XP and Windows 7 verified):
* Step 1 : Start menu –> Run
* Step 2 : Type ‘iexpress’ without ‘
* Step 3 : Follow the wizzard.

http://expertester.wordpress.com/2008/07/11/create-self-extractinginstaller-for-free/

Enter image description here

Once it's done, then you can just make your own HTML page pointing to your installer EXE file. The only thing I ran into was that the install didn't work the first time every time. I ran it, and it didn't extract the files. Then I instantly ran it a second time, and it worked just fine... I don't know why yet.

like image 77
AndyD273 Avatar answered Sep 21 '22 20:09

AndyD273


We use a self-extracting ZIP file to launch our installation. (There are many ways to do this, for example, use 7-Zip, WinZip, etc.) This way there is only 1 file to download.

But I'm not sure how you would handle updates in this scenario - I assume you could publish both the ClickOnce and the self extacting ZIP file so that the application finds the necessary files afterwards...

I hope this helps.

like image 41
Mahen Avatar answered Sep 21 '22 20:09

Mahen