locked
How to update (online update) my "third party" application in Windows Vista? RRS feed

  • Question

  • Hi there,

    I'm really concerned about a special issue referencing third party application installation on windows vista. Here is my scenario:

    - I develop an app and ship it
    - A user somewhere installs the app with the given installer (there
      he has to confirm installation and the installer installs the app with
      admin rights - if I don't confuse that)
    - after a while of using the software an online update is available
    - this update wants to override DLLs and maybe INIs in the installation
      path of the app (example: C:\programs\thirdPartyApp)
    - the attempt fails cause it is not allowd to write these files!

    What can I do now? I mean, I don't understand what could be written when and where?
    Moreover the app cannot modify INIs after shutting down!!! Imagine, how should I store persistent data after the program session?

    Please give me information on that issue. Moreoever is there a kind of "rule-table" available summarizing what is allowed and what is permitted? (Please don't refer to the LUA Bug app, this is not the kind of information I'm searching for)

    Thank You so much.
    Chris :-)
    Friday, September 15, 2006 9:36 AM

All replies

  • Hi Chris

     

    I hope see this entry here.

    Have you resolved the problems? I have the same one now and looking for a solution.

    I hope u can answer.

     

    Kind regards

    Chris

     

    Friday, January 18, 2008 1:01 PM
  • Here's one relatively simple way you might try for your updater.  There are a variety of options, though.

    main application <manifested with requestedExecutionLevel of 'asInvoker'>

        -> detect Update

        -> download Update to temp

        -> Tell user an update is ready, will run it either now or next time you start the application

        -> copy update-launcher  <manifested with a requstedExecutionLevel of 'asInvoker'> to temp path, then run it. Quit main application.

     

    update-launcher: <manifested with a requstedExecutionLevel of 'asInvoker'>,

        -> ShellExecute the updater <manifested with a requstedExecutionLevel of 'requireAdministrator'>, wait until process terminates.

        -> (maybe) relaunch main application.  (it is important you do not launch the main application from the elevated updater! That could cause it to run as the administrator, or some other user - not ideal.)

     

    Updater: <manifested with requestedExecutionLevel of 'requireAdministrator'>

       -> update the application's files, of which none are now in use.

       -> quit.

     

    Caveats:

       if your application produces virtualized files, you need to take care when deploying an update which will add a requestedExecutionLevel; it will basically cause any virtualized files to 'disappear' from the application's view of the world.

       make sure the main application is not launched by the elevated updater process.

       test as a standard user as well.

       you should probably sign your updater and your other update-files.

     

    Some other options: write an updater service.  modify the ACLs on the installation directory (potentially a security problem).  run a stand-alone-installer.

     

    If you need your updater to work without elevating, ever, you should probably not be installing to program files, but instead to a per-user-writable location - possibly under AppData.

     

     

    Monday, January 21, 2008 8:13 PM