Request a blog entry

My theory is that this page will be for requests for problems or questions you’d like me to address. I do have plans to write articles about:

  • New Features in .NET 4.0
  • An update to the Expiring Certificates problem, complete with a flowchart to help you figure out how you can handle it. I’ve actually finished this, but am trying to figure out if you can programmatically uninstall and reinstall a VSTO application (my efforts so far are mostly just entertaining). 
  • How to programmatically uninstall a ClickOnce application. This is already embedded in the Expiring Certificates post, but I’ll make it a separate post. In fact, maybe I’ll make MakeCert and RenewCert separate posts as well. I’ll just deconstruct the big kahuna, since there are uses for the code other than handling expiring certificates.
  • How to handle deploying data, including SQLCE and SQLExpress databases.
  • How to use Mage and/or MageUI to move a deployment and change the installation URL.
  • How to deploy .NET 3.5 SP-1 locally with your application instead of using the bootstrapper and picking it up from microsoft.com.

Please feel free to leave any other ideas or requests you have here, and I’ll see what I can do. It’s free to ask.

76 Responses to “Request a blog entry”

  1. Jason McDonald Says:

    Hi Robin,

    First, I’d like to thank you for all of the great blog posts (and tweets!) you’ve written about Microsoft products. We especially appreciate how much you’ve been tweeting about @Bing and @Office.

    MSN unveiled a preview of our biggest homepage redesign in over a decade and because you’ve been such a great supporter of Bing, we want you to get an early look at the redesigned MSN homepage and let us (and the rest of the world!)know what you think.

    We’d love for you to take the new MSN homepage for a test drive at http://preview.msn.com, then tweet, blog, or even Facebook about your experience – we think you’ll really like what we’ve done.

    Here are some of the new features we’d want you to keep your eye on and test out:
    Fresh, new look cuts through the clutter with 50% less headlines than before and a simplified navigation makes it easier for you to get the information you want on the Web.
    Great search goes hand-in-hand with a great homepage. Bing and the new MSN creates a unique homepage experience to help people make more informed, faster decisions. 
    Easy, direct access to your Facebook, Twitter and Windows Live feeds, comprehensive local information, and in-line video from the homepage helps you stay connected and in-the-know.

    Thanks again for your time, and we look forward to hearing what you think about the new MSN homepage!

    Jason
    MSN Outreach Team
    http://twitter.com/msndotcom
    http://facebook.com/msn
    http://msnblog.msn.com/

    • robindotnet Says:

      Thanks for asking. I did check out your site, and it definitely has more white space than the old design which makes it much more appealling. I think Bing is amazing, and incorporating it into your pages is awesome. Great job, and I’ll look forward to it going ‘live’!

  2. JimZ Says:

    Any updates/ideas on how to use ClickOnce to install for multiple users?

    Using your examples (THANK YOU!), Our current install centralizes the MS express database and shortcut link within the “All User” location. With some permission tweaks, it works. EXCEPT:
    1)Each user has to install (unfortunate but no biggie)
    2) THE DEAL BREAKER: Our app requires some setup where info is store in app.settings. Therefore each user will need to run through setup again.

    Thought of centralizing the Setup Settings but thought I would take a stab at getting your opinion first. PERHAPS, there is a better option for a self updating application for all users of a PC???

    Thank you in advance!
    JimZ

    • robindotnet Says:

      Hi Jimz,

      ClickOnce does not support being installed for all users as explained here. The problem you are going to have is that ClickOnce deployments run without administrative privileges, so you are going to find that you can’t write to any common place on the disk, especially with Windows Vista and Windows Fabulous (a/k/a 7).

      The application DOES get installed for each user, under each user’s profile, so each user will be running their own version of the application, with their own configuration files, etc. Unless your config files are huge, I don’t really see why this would be a big problem. It’s no different than them having their own Office settings (and that actually does install for All Users).

      If you really can’t live with it, you should check out the setup & deployment package option available in Visual Studio (except the Express editions).

      RobinDotNet

  3. ChrisP Says:

    Hi Robin,
    thanks for taking the time to blog about dealing with some real world problems with ClickOnce.

    I have a problem and I am very surprised that noone else seems aware of it. Perhaps you can help and once your blog is written, it may be able to help others as well.

    The problem is that from release to release, a dll inside a clickonce package will have a different hash value, even if none of the source code for that dll has changed.

    This hash value difference results in customers having to download the entire package for every release – which goes against one of the central motivations behind click once. In our case it is many thousands of users downloading over 20 MB almost simultaneously every three months. For some of our customers, especially the bigger corporations and those without a high bandwidth connection, this is a real issue.

    This problem can be easily verified with any existing .sln – rebuild all, then copy your obj folder somewhere else, then rebuild all again and do a binary comparison of the output files – they are different. I figure this is because the datetime of the build is stuffed into the .dll itself, but I could be wrong.

    The only way to get the dll to not change in the earlier example is to do an incremental build, but this is not practical for a proper software house using best practices (i.e. using TFS build and supporting development teams in different countries, each its own TFS build agent). Even if we were using a different source control and build system, incremental builds for production is surely not best practise.

    Any ideas? I have Googled a lot and even delved deeply into the “not designed for public use” compilation related classes in the .net framework and come up empty.

    Thanks,
    ChrisP

    • robindotnet Says:

      Hi Chris,
      This is not a problem, it is by design. The date/time is part of the hash. If you want to include a dll and NOT have it copied down repeatedly, put it in a separate solution and strongly name it, build it as a release build and include the dll in your main solution. This way, it doesn’t get compiled every time, and since it is strongly named and versioned, it will be cached rather than copied down repeatedly.
      I recommend you add a folder for these dll’s (in case there are more than one). We also put 3rd party dll’s in the same folder. Then add a reference and point it to the dll in the folder. The properties on the dll itself should be BuildAction=None, Copy…=Never, but on the reference, CopyLocal should be true.
      Robin

  4. Brian Says:

    Will ClickOnce ever offer a quiet uninstall option?

    • robindotnet Says:

      Hi Brian,
      I’ve sent you an e-mail. If you send me some details, I’ll put this request in to the product team. I don’t know that they will do it, because ClickOnce is user-specific, and not designed to be deployed silently or as a pushed deployment, but I can ask.
      Robin

  5. boyparka Says:

    This is not a blog entry request, but I could not find any contact links on your blog and I did not want to go off-topic in your regular posts.

    Anyway, I was googling for a fix for the problem described on this page: http://www.windowsdevelop.com/clickonce-setup–deployment-projects/windows-7-notification-area-behavior-714.shtml

    You seem to conclude there is no fix, but I actually stumbled upon a hotfix from MS that may correct the unwanted behaviour. I am posting the link here, because the site above (also) lacks a simply way to contact you or the OP. Link to the hotfix:

    http://support.microsoft.com/default.aspx?scid=kb;en-us;976883&sd=rss&spid=14498

    If you would pass it on, that’d be great.

    Thanks!

    • robindotnet Says:

      Thanks, I appreciate that. From what I’ve read about Windows 7, they are discouraging people from putting icons in what used to be called the System Tray and is now called the “Notification Area”. Either way, if you have a program that puts an icon in there and the user doesn’t use it much, it will hide it by default. You have to actually go into the Notifications Settings and set it to “Always show all icons and notifications on the taskbar.” You can’t change that setting programmatically. You can try the hotfix and report back, but I’m going to be awesomely shocked if it changes that behavior.

  6. Depechie Says:

    Hey Robin,

    Maybe a blog post request, because we are struggling to get this done and can’t find a solution!

    We are working with vs2008 ( but vs2010 could be used to if needed ) and are using the Crystal Report view tool to show a report. On our development machines with VS this works…
    But deploying our winforms app with clickonce doesn’t work, because the viewer app is not installed!

    We used the bootstrapper tool to generate a new entry in the clickonce prerequisites, but the .msi install from Crystal Reports won’t install when you don’t have admin rights on the target machine!!

    So we are stuck, in other words, how can you add new software during a clickonce deployment? ( blog post 🙂 )

    • robindotnet Says:

      Hi, Depechie,

      ClickOnce deployments themselves don’t require administrative privileges, which is by design. This allows people in corporate environments to deploy applications without Corporate IT having to worry about there being any impact on other software installed on the machine. So unfortunately, if you need to install prerequisites that require administrative privileges, you will have to get admin privs assigned to the user temporarily, or have the Powers That Be install the prerequisite for you.

      The other thing you can try is to include the dll’s for that component in the deployment. For some things, this works (DirectX), for some it doesn’t (Office PIA’s before 2010).

      So to do that, first you have to figure out what dll’s are used, and copy them into the folder where your project file is. Then add them to your project, set build action = none and copy-to-output-directory = ‘do not copy’. Delete your references to the dll’s in the GAC and re-add them, pointing them to the local versions. Set ‘copy local’ to true.

      This will deploy the dll’s along with your app, and ensure you are referencing the ones you have deployed. Try it on a machine where the viewer is not installed as a prerequisite already, and you will quickly find out if it works. Like I said, sometimes it does, sometimes it doesn’t, it just depends on who created the software. Let me know if it works for the CR viewer, I’d be interested in the outcome, and could let people know when they post this question to the MSDN ClickOnce Forum.

      You’re right, it could have been a whole blog entry on its own…
      –RobinDotNet

  7. Depechie Says:

    Well Robin,

    First up thanks for the detailed information!! But we circumvented the problem by adding a link in our program for the users to manually download and install the viewer app themselves. If they still don’t have admin rights, a local admin must provide help installing it…

    But still we aren’t very happy with this, if possible I would still like to create one setup package, with clickonce functionality.
    But all options we tried resulted in not enough rights to install the viewer…

    Maybe someday we get a solution 😉

  8. Grafix Says:

    You replied to my question in social.msdn. Thank you very much. I tried but its not working at all because this is my first time of having MySQL Server project.

    ALL i want is it to make it installable set up for other target machine.

    Here is the COMPLETED VB.NET project (please remove the spaces):
    http://www.4shared.com/file/4UBh92gQ/Project_Code.html

    I include the project database “sisdb” copied from my machine ( C:\Program Files (x86)\MySQL\MySQL Server 5.0\data\sisdb)

    Please I used:

    – Microsoft Visual Studio 2008
    – MySQL Server 5.0
    – MySQL Connector/NET 5.0.9
    – Crystal Reports
    – I also have access database in the bin\debug directory

    My current working project directory is C:\SIS\

    I CAN NEVER Thank YOU enough Robin >>>

    • robindotnet Says:

      I answer all questions in the forums for two reasons.
      (1) So other people who might have the same problem can see the answer (if there is one).
      (2) So other people can chime in and help, in case I don’t know the answer (I don’t know everything. I know, *gasp*!)

      If your problem is not resolved, go into your thread in the forums and just add a reply with “bump” in the body, so it bumps it back to the top of the list. I answer a LOT of questions in the forums, but I also work 60-80 hours (or more) a week, so sometimes posts fall through the cracks.

      Thanks,
      Robin

  9. Josh Says:

    Hi Robin,

    I’ve used your site a number of times, so thank you VERY much for your work. This question isn’t directly about ClickOnce deployment, but I’m hoping with all your expertise you may be able to help me out. Is there a way to change the “tooltip” that pops up when you mouse over an application in the taskbar? We have many many applications that have all different sorts of form formats that we’re actively converting to ClickOnce deployment, so I’m trying to find a universal (and simple) way to relay the version number to the user without wasting space displaying it all the time. I also tried messing around with WN_NCMOUSEMOVE but that may be more effort than it’s worth. I’m open to any suggestions, hope to hear from you soon!

    • robindotnet Says:

      Hi Josh,

      I don’t know of any way to do that, but it doesn’t mean there isn’t. It’s not supported by ClickOnce. (The universal way to show the version of your application is to have an About screen that the user can view.)

      You might try posting to either the Visual Basic Forum or the C# forum, depending on your language of choice. I would also specify if you’re talking about Windows 7 (I’m guessing you are) and if not, what version of Windows you are using.

      Robin

  10. Andy Blackman Says:

    Hi Robin,

    Firstly, a million thanks for all the great info that you provide on ClickOnce.

    My request is for a recommendation about the best way to provide redundancy between different ClickOnce servers but all for the same application. i.e. I’d like to have (say) 3 servers (globally) each providing the same version of the same product (e.g. MyApp v1.2.3.4) , but users should be able to launch from any of the servers without requiring a reinstall.

    I’m guessing that this is more of an IIS or Networking issue, but wonder if you have a recommendation…

    Thanks so much,

    Andy

    • robindotnet Says:

      Hi Andy,
      You can’t. The installation URL is one of the keys of the deployment identification, and if it changes, the user has to uninstall and reinstall the application.
      My company handles this by pushing our deployment to a CDN that provides access worldwide. You might look into deploying your files to an Azure CDN. It’s not as robust as the one we use, but I don’t think it’s horribly expensive (nothing in Azure is), and it would give you the redundancy across all of the locations of Microsoft’s data centers.

  11. Meghaa Says:

    Hi Robin,
    I found your blog very helpful for clickonce deployment. Actually i am beginner for this feature and facing a problem,i think you can help me out. In publish options i have specified the Publish location :- http://localhost/Inventory/ and the Installation folder url(client’s web server’s address). In the Prerequisites option when i select the third option ‘download Prerequisites from following location’ and i am specifying the location(client’s web server’s address/myfoldername).

    The above process allows me to install CrystalReport basics for visual studio 2008 but gives me a error while installing dotnet framework 3.5 if the client’s machine does not have dotnet framework installed.

    can you please suggest me way of clickonce deployment at clients machine not having dotnet framework 3.5.
    thanks in advance.

  12. bhaskar Says:

    Hi Robin,

    I have a question on bringing up application on the number of user profiles on a workstation. If there are fewer profiles, the application comes up pretty quick Howerver if multiple users login and work on the application(therefore the workstation has many user profiles), the application is slower in coming up.

    I am using ClickOnce for my deployments and we intend to use it for production. Any suggestions to avoid this performance issue?

    Thank you

  13. janveodin Says:

    Hello Robin,
    great site. Your article about certificates really helped us get ahead with our Clickonce Installation, I am not sure we would have sticked with it would it not be for those articles.

    We are a very young startup and didn’t get a certificate by one of the big CAs get. Can you help me with two questions:

    1) Today we publish with a TestCert on .net 3.5 can we publish an update (auto-update or programmatical) to switch to “real” certificate? From your article I assume we will have to use your “uninstall / new install” method.

    2) Do you have experience how much difference in the installation rate the green/yellow notice from a “real” certificate makes compared to the red “unknown publisher”? We have seen up to 50% of setup.exe downloaders finish the installation and I am intrigued to know how this compares to your numbers and if we can expect an uptick if we have a real certificate.

    Thanks again for your work on ClickOnce, please keep it up!

    Best regards from Berlin.

    Jan

    • robindotnet Says:

      Hi janveodin,
      (1) If you are targeting the .NET 3.5 Framework and you don’t have a VSTO application, you can change the signing certificate without the user having to uninstall and reinstall the application, even if you change from a test certificate to a “real” certificate.
      (2) I suspect that many people don’t look too closely at that security dialog, although I do know that some people do. When our certificate expired the first time and it started saying “unknown publisher”, we did get a few calls. It probably depends on your company and your customers. If your customers all know you, and you have verified that they can expect it to say that, they might just let it go. The company I work for — GoldMail — has thousands of customers around the world, and I think it gives them a sense of security to install something from the internet and have it be signed and assured by Verisign, especially if they work in a corporate environment. It would be more difficult to get our application whitelisted by corporations if we used a test certificate.

  14. janveodin Says:

    Thanks a ton Robin!

    Regarding the certificate, we are not familiar with our users so it’s probably a good call. I am worried by the recent Comodo scandal, I take it you have your from Verisign?

    One small other question, can we go from 3.5 to 4.0 without uninstalling/installing?

    Your really saved me lots of time, thanks.

    • robindotnet Says:

      Yes, we use Verisign. If you’re ever going to use it to sign a VSTO application, you don’t want to get it from thawte — there’s a bug in the VSTO ClickOnce stuff where thawte’s use of intermediate chaining isn’t recognized. I think Verisign bought thawte, but I don’t know what impact that made. (I think Symantec bought Verisign, for that matter. Who can keep track of these things?)

      You can go from .NET 3.5 to .NET 4 without uninstalling/reinstalling only if you are certain that all of your customers have .NET 4 installed. So I’d use the uninstall/reinstall method if you do that, just to be safe.

      Good luck!

      • janveodin Says:

        Thank you! I bought from Thawte, couldn’t resist a 149$/year cert one of their resellers offered. Versigned starts at $499.

        Regarding .NET 3.5 to .NET 4.0 i remembered reading, that the update can be install “over” / on top the existing installation. The bootstrapper in the setup.exe will verify and download missing prerequisites and update normally.

        I think this would be acceptable for such a “big” update.

        Thanks for help again.

  15. sharan Says:

    Hi Robin,

    Excellent blog. Thanks for all your help you had provided in your blog.

    I am facing an issue with my clickonce application in a win7 64-bit pc. when an instance is already running, i am trying to launch the second instance of the same application through the clickonce url (url generated when i publish the application). Now the UI for second instance is not shown. But i could find the app running in task manager. The only way i could kill that instance is through task manager. what could be the reason for this. It works fine in 32-bit pc.

    FYI: I am using oracle instant client dlls in my application. And the platform for my app is set to “x86”.

    • robindotnet Says:

      The second instance is crashing. Try putting in an unhandled exception handler or some logging or messageboxes or something to see what it’s doing. If you don’t know how to add unhandled exception handling, post back and I’ll add a blog entry with the code for that.
      –Robin

  16. Alexander Says:

    Hi Robin, could you please help me to get a big picture of installation.

    I wrote a windows form application in VS2010 using VB, gave it a strong name, compiled and placed onto a network drive. Then I installed Net Framework 4 on each user’s machine, and users don’t need anything else. If I try to run the exe from the network it dies due to permission limitation. If I copy the exe into a local folder, the app works fine.

    It used to be security wizard in net 1.1 where I would say give full trust and that was it. Now it’s not working with Net 4.

    What should I do to run exe from the network after all pre-requisites installed on users machines?

    Thank you.
    Alexander

  17. David Shannon Says:

    A while back you did a blog post on deploying SQLCE locally using ClickOnce. The new SQLCE (4.0) uses a main .NET DLL that chooses the correct versions of the 6 native DLLs depending on whether the app is running as 32- or 64-bit. But because the native DLLs have the same names, you either have to deploy only one group or deploy them in different subfolders under the app path and use a “probing privatePath” in the app.config.

    I’ve tried to figure out how to get this to work with ClickOnce so that I can deploy an “AnyCPU” app that can be installed on any machine and will use the correct SQLCE DLLs at runtime. But I can’t get it to work. If it’s possible, a blog post on how to do it would be welcome.

    • robindotnet Says:

      The article is here. You actually have to track down the dll’s from SQLCE and add them to the project to deploy them locally rather than using the prerequisite to install SQLCE. The main .NET dll doesn’t just select the right versions — you have to do that. Also, the SQLCE version is part of the file name.

      • David Shannon Says:

        Thanks for getting back to me. I understand that you have to track down the SQLCE DLLs, and that there are 2 sets of them (32-bit and 64-bit). What I want to do is build one single install that will work on any machine, regardless of bit-ness. So what I am trying to figure out is:

        (1) Is there a way to build a ClickOnce deployment (for AnyCPU) that will copy the correct set of DLLs to the users machine, based on bit-ness? I can do this with a condition using Windows Installer by telling it to download these DLLs if the target machine is 32-bit or those if it is 64-bit, for example.

        (2) Alternatively, is there a way to deploy files to subfolders under the application folder so that I can deploy both sets of DLLs and have the app use a probing privatePath to find them? Or do ClickOnce apps ignore privatePath? (It turns out that the new .NET provider for SQLCE 4.0 is smart enought to figure out which ones to use, based on bit-ness, if it can just find them. But they have to be in different folders because they have the same names.)

        Thanks…

        • robindotnet Says:

          You could definitely include both sets of dll’s in the deployment. Just put them in separate folders. Then when your application starts up, have it copy whichever ones apply to the main folder. The problem is that I think the references to the main SQLCE dll would be smart enough to know you are not using the one you compiled against, but you’d have to try it to find out.

          To do this deployment, you need the two folders with their respective dll’s in them, with all of them set to have a build action of ‘none’ and ‘copy to output directory’ set to ‘copy always’. Then you need another set of dll’s (doesn’t matter which ones) in the project that are referenced by the project. These should have a build action of ‘none’ and ‘copy to output directory’ set to ‘copy always’.

          You need the top ones to set your references to, even though they will be replaced before you access them. If you don’t have them in your project, you can’t reference them at all, and if you don’t reference them, the app won’t know where to look for them. I hope that makes sense.

          • David Taylor Shannon Says:

            Hmmm… If I understand correctly, you’re saying to have ClickOnce copy both sets of DLLs (32 and 64 bit) in separate folders under the app folder, then have the app itself copy the correct set to the actual app folder on first run, before the main SQLCE has a chance to look for them and throw an exception. That sounds pretty good. I’ll give it a try. Thanks…

          • robindotnet Says:

            Yes, I would try that. The only problem I can think of is the reference to the SQLCE dll in the project. I’m not sure you can get away with swapping out the dll for the 32-bit if you compile with it referencing the 64-bit. But hey, you never know, you can try it. If it doesn’t work, post back, I have an idea how to get around that.

  18. sharan Says:

    Yes you are right. The application is crashing saying “System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.”. But the exception doesnot pop up always. Sometimes it works good for as many instances. I am getting this exception only sometimes. What could be the reason for this. Is this related to any previlege problem? But still it runs for one instance right?

  19. sharan Says:

    I am guessing here.. The exception occurs since a 32-bit application is trying to run as 32-bit app in a 64-bit PC…But still it works good in a win xp 64-bit PC…Pls provide your thoughts here…

  20. Rahumanshereef Says:

    hii,
    I want to deploy my C# project. I’m using data base along with my project (.dbo).

  21. GlennP Says:

    I downloaded the Certificate Expiration .zip from http://archive.msdn.microsoft.com/ClickOnceCertExp, but the unzip process requested a password to unzip most files. What password should I use?

    Though you detail most of the code in your article, it doesn’t provide, for instance, DeploymentUtilsWin32, so I need the code download for that. Thanks.

  22. GlennP Says:

    Oh, found a workaround. I can see inside the zipped file, and copy content out to a normal directory. I’m good now.

  23. Rhonda Says:

    hi Robin
    love your blog… although i don’t read it ‘normally’ i do find it in order to search. good job, and good explanation.
    1 suggestion – can you break this page into multiples – quite a ways to scroll down to get to the bottom
    2. question. can you expand on the ‘included / referenced .dll in a VSTO click once project’? i saw something above about it was copied each time even tho it didn’t change. I have the other problem… we’ve made a change, but it isn’t cascading to previous installments (although a new install gets the new version, obviously)
    We’ve tried uninstalling and re-installing, but that doesn’t do it either.
    3. did you ever go back and figure out how to programmatically uninstall/ install a VSTO clickonce addin ?

    • robindotnet Says:

      Thank you for your feedback.
      1. No, I don’t control that.
      2. Made a change to what? To the vsto application, or to a third party assembly?
      3. Yes, I did. I used the code in this article, but I put uninstall code in a separate program and executed it from the add-in. So the stub program would show a screen that said “please close powerpoint” (or whatever office product it was), and when the user clicked OK, it would wait a few seconds, and then programmatically uninstall the VSTO add-in and fire off the installation of the new version.

  24. Sandhya Says:

    Hi Robin, I happened to read a response you had posted for this error – ‘ The server sent a response which SharePoint Designer could not parse. If you are trying to connect to a Windows SharePoint Services server, check with the server’s administrator to make sure Windows SharePoint Services is installed properly’

    http://social.msdn.microsoft.com/Forums/en/winformssetup/thread/fa09fa69-e0b4-4970-981e-69175c5764ea

    I get this same error, although not while using clickonce. I used to work on this web project in Texas. Now I’ve moved to Singapore, but I am unable to open the same web project (hosted in the US) I have worked on from Visual Studio 2008 (.net 2.0 project). It only gives me the error I mentioned above. We do not use SharePoint Designer in any way. Do you think this is a user access exception, or an issue due to my new Internet Service Provider, since I do know there is some amount of internet use monitoring in Singapore?

    Any help is appreciated! Thanks!
    Sandhya

  25. Jen_T Says:

    Hello

    Do know of any guidelines to deploying a bootstrapper package for SQL Server 2012 Express to use as a prerequisite to a ClickOnce application? Everything we can find seems to be about distributing SQL Server 2012 Express LocalDB. However our app is multi-user and LocalDB appears to be single-user.

    • robindotnet Says:

      You can see if you can follow the instructions for the SQL Server 2008 Express R2 bootstrapper, which are here. I had some discussion with the product manager for SQLServer Express when they change the bootstrapper in VS to only include the LocalDB version. Why do you want to use Express rathan than LocalDB? The LocalDB version is less overhead for the client.

      • Jen_T Says:

        Thank you for your response robindotnet. LocalDB is single user. Our app is multiuser

        • robindotnet Says:

          You are installing a ClickOnce application on a machine and expect to have multiple users? Or you have a SQL Express database somewhere and want the application to be used by several different users all going against that one database?

          • Jen_T Says:

            We are an ISV and that’s pretty much how we have been doing it with our VB/Access app for the last 13 years. We have clients all over the world who are really happy with the ease of install. Every machine gets the front end and the access runtime. Any machine can host the database. It makes it so much easier than having ordinary users confused with notions of Client Install and Server Install.

            Is there something I am missing about current technology that makes difficult what was so easy a decade ago? Or am I just asking a stupid question? I don’t mean to be sarcastic, I’m concerned that I’m misunderstanding something fundamental.

          • robindotnet Says:

            I discussed the LocalDB vs Express issue with Microsoft, and it came down to the fact that they can’t include every prerequisite in Visual Studio because it’s too much space, so they picked the one that would be used most. Don’t worry about being sarcastic, I’ve already done that for you! 😉 The problem is they are moving forward and when they do that, they can’t always provide a path for the people not moving forward as quickly.
            If you are accessing SQLServer Express on another machine, aren’t you just using ADO.NET and a connection string to connect to it? In that case, you shouldn’t need it installed on the local machine if you are never going to use the local machine to host the database. You’re not using one person’s desktop machine to host the data, and the others connect to it, are you?

  26. Jen_T Says:

    Our app is currently VB/Access not SQL Express. We wish to move to SQL Express. Our clients are small businesses. who in most cases don’t have a server on their network. A typical configuration is 3 or 4 PCs on a per-to-peer network although a small number do have about 10 PCs in a domain. Our app is installed on all the PCs. The Access runtime is bundled with our app,and installed silently on every PC. We’d just like to provide the same multi-user functionality and silent install we have now, but using SQL Server Express instead of Access. In the past Microsoft offered plenty of support for scaling up from Access to SQL Server. It seems odd that Microsoft now only offers us a single-user database to bundle with our app. That’s scaling down, not up. We can’t possibly move our app from multi-user to single-user. our market wouldn’t accept it.

  27. Hitek Says:

    Robin, did CO get any improvements with 4.5?

    Also, where can I find information about multiple-dependency issues and GACing?

    • robindotnet Says:

      There were no C/O improvements that I know of with the .NET 4.5 Framework.

      As for multi-dependency issues and “GACing”, I need more specific questions. I recommend you post questions to the MSDN ClickOnce Forum. The Microsoft people come through and provide answers, and I answer questions there when I have a chance.

  28. Ben Says:

    Hi Robin, I don’t know if this is the right way to get a question through to you but here is my problem. ( Keep in mind I started with VB 2012 and I literally knew nothing about programming just over 24 hours ago.)

    I created a small program to learn what everything in the toolbox does and so I can play with code. It works exactly the way I want it and I want to publish it. I want to publish it but get an error that says: “Default Certificate could not be created. Publish aborting”. I followed your post here: https://robindotnet.wordpress.com/2009/03/30/clickonce-and-expiring-certificates/ and downloaded your word document but when I look for MakeCert.exe and Pvk2Pfx I can’t find it because I only see v8.0A and v7.0A instead of v6.0A. I’ve gone through both files looking for MakeCert.exe and Pvk2Pfx. but can’t find it.

    Please walk me through this?

    Thanks for any help and thanks for helping other people out aswell!

    • robindotnet Says:

      Hi Ben,
      You get faster response and more help if you post questions to the MSDN ClickOnce Forum.

      The article about certificate expiration applies to people who already have a production application published and they need to update the certificate.

      You should check out these articles to get started with ClickOnce.

      Click Once Overview
      and this one:
      How to publish a ClickOnce app

      Robin

      • Ben Says:

        I don’t want to post here again but I don’t have a certificate and I don’t know how to publish without signing a ClickOnce manifest. I’m using a trial version so could it be that I can’t publish an application since the trial is meant for review? If I need any more help after the next response I will post it in the forum you linked me to, Thanks for the help so far!

        • robindotnet Says:

          You shouldn’t publish without signing the ClickOnce manifest. You can create a test certificate in the Signing tab for your main project in Visual Studio.

  29. Das Says:

    Hey Robin,
    I am not sure whether my question will have a Click once related answer, but let me put it to you.

    I have a click once Application which was existing since long, and the app is built in Visual Studio 2005 and makes use of Crystal Reports 10.2.
    We had to make few changes recently that required Visual Studio 2008 and it’s compatible Crystal 10.5. We made this Crystal 10.5 a prerequisite and published the files. When users download the app, it isn’t prompting for user credentials in Windows-XP but when they do it in Windows 7, it is prompting for user name and password. Most of my users are not admins on their machines.

    How can I make a silent install without prompting for user credentials in Windows 7?
    BTW, I hosted the app in iis 6.0 and set windows authentication set to true on my virtual directory.

  30. Das Says:

    Robin, I forgot to mention one more point here….
    In visual studio. for the prerequisites, download prerequisites from the same location as application has been chosen.

  31. janveodin Says:

    Hey Robin,
    you are the most helpful resource ever regarding ClickOnce & SmartScreen. Would you happen to know whether a change in file name say “setup1.exe”, “setup2.exe” etc. would affect Smartscreen? Or would they all pass because they are the same signed setup with different names?

    Thanks,

    Jan

    • robindotnet Says:

      I would say it depends on when/how you change the name. If you create the deployment and just rename setup.exe to something else, I think it wouldn’t matter.
      Robin

      • janveodin Says:

        Thanks, that would be naming it something else from the start. I was intrigued whether I can name them setup_adwords.exe vs. setup_organic.exe and still pass smartscreen as the same file. Thanks anyways

        • robindotnet Says:

          You can’t change the name of the file when it is created upon doing a build/publish. You can rename the file after the fact. I don’t believe this would be impactful to the smart screen filter, because the setup.exe is signed upon build/publish. The file that is being caught in the smart screen filter is not the setup.exe, it is the exe for the client application you are deploying.

  32. janveodin Says:

    Thanks!

  33. rhonda Says:

    can you re-visit the “missing FrontPage Extensions” issue for IIS7? is this something that MS is looking to perhaps ‘fix’ in a future release of VS? we are still using VS2010, because nobody can afford to update all of their codebase every year, but moving to server 2012/IIS7, and still need to host the deployment of both a clickonce windows app and a clickonce vsto
    also noticed that the MSDN page says that this has been ‘retired’, if so, what are we supposed to be doing instead?
    thanks

  34. Steve Says:

    Recently changed target framework on a CO app from 2.0 to 4.0. Build process was to publish, obfuscate using the VS Tool Dotfuscator, and re-sign everything with the Manifest Manager Utility (Brian Noyes).

    This time, the MM complained because it was set to framework 3.5 and my app was published with 4.0. So, changed the version in MM to 4.0, and no run time error during the re-signing.

    However, when I try to install the CO app, I get the dreaded “Cannot Continue. The application is improperly formatted”. If I don’t re-sign things with MM no problem.

    Any ideas on where to start looking?

  35. robindotnet Says:

    Sign the manifests manually using the mage.ui executable and see if that works. That MMU is really old, and doesn’t account for some changes made to ClickOnce, like the signing of the executable.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: