!!!URGENT!!! Accessing the Application Manifest and Deployment Manifest at runtime

Basically, I want to be able to load both at the startup of my ClickOnce app to

1. Get the Publisher and Product info from the Deployment manifest

2. Iterate through the Application manifest for optional download groups to provide a background process to pre-fetch these groups.

I've scoured the API trying to find out how to get access to the current manifest in a programmatic way....

Thanks,

Jim



Answer this question

!!!URGENT!!! Accessing the Application Manifest and Deployment Manifest at runtime

  • june_21

    This is essentially what I am doing now. However, the next part I think is really a must is that ability to create dynamic download groups *or* have the ability when creating the manifest to assign assemblies to multiple groups.

    For example, we isntall via ClickOnce our core assemblies and set the rest of the application to optional so that they can be downloaded on demand. However, some power users may want to get everything up front. Well, right now there is no elegant solution to this. What I am doing now is iterating thru my copy of the download groups as mentioned above and checking if each group is downloaded individually. This is very inefficient it seems and is compounded by a larger number of assemblies. It would be ideal to have the existing groups *also* incldued in a master group or second group that can be called to download the remainder in one call...this would solve many performance problems with retrieving the "rest" of the application.


  • Peter2005a

    Go here and vote on the suggestion I entered to Microsoft.
  • andreesje

    I will have to check to see if we can do this. Also, I would like to clarify that the time to cehck for and then start downloading takes a long time. I haven't broken it down to the checking of the download group versus begining to download the group. Seems that there is a significant amount of time between asking to download the group and before anything is actually downlaoded, and a lot of disk activity is taking place at that time.

    If I can't get access to our real deployment then I would have to create a sample app that has as many assemblies. I truly suspect it is because of the number of files that is causing the performance issue. There has been another person in this forum that complained of something similar in relation to having a large number of files.


  • Amit_Kulkarni

    There is no supported programmatic method for obtaining manifest information such as publisher/product, or enumerating optional files and dependencies, etc today.

    You can get what you want by simplying mirroring this information in a file carried with the app. It is inelegant and requires keeping this file in sync with the app manifest but is the only way to currently access this information reliably. You should avoid carrying and parsing manifest xml directly since future changes in the manifest schema are not guaranteed to be back-compatible and could break your parser.

    We are evaluating exposing a manifest DOM to applications for the purpose of reflecting over the manifest metadata in future releases of ClickOnce.


  • badri_neo

    Agreed checking for the presence of an installed group should be a relatively fast operation. If you are seeing high latencies during this then it is very possibly due to a performance bug, although I don't think we've seen this in testing. Have you already submitted this bug to MS If not, can you possibly provide a pointer to a deployed app that exhibits this behavior to help us investigate, thx.
  • Bength

    I have entered this as a bug in the MSDN feedback page, FDBK45208
  • ToxicSoul

    Hi James,

    I don't suppose you ever got any response to this Were you able to find a workaround

    I'd like to be able to list the optional updates and give the user a choice as to whether they are installed.

    Thanks,

    David.


  • Brad Ball

    This is what I am doing, however, making the additional on demand requests for many mutliple groups is not very efficient. More time is spent outside of actually downloading the files. I have a rather large ClickOnce deployment with 500+ files, and just checking if one group is downlaoded can take 9 seconds on a very fast machine. So I assumed doing this once would be far more efficient than N times.

    I have also a bug in that states that checking if files are downloaded in a large ClickOnce deployment takes far too long. I've seen it take as long as 3-4 minutes to check if a file group has been downloed already. All this time it is doing it, there is a lot of disk activity so I can only assume it is because o the number of files. However, if only 3 of those N number of files are in the group, why does it take so long I assume it should only need to look for the files in the group and not touch the others...


  • techexpert

    ClickOnce v1 doesn't support assemblies belonging to multiple groups, or for groups to be composed of multiple groups; only a flat list of groups is supported.

    However, it still sounds like you can acheive this if you carry the necessary data along with the app: With the app manifest carrying a flat set of defined groups, let the app carry a file that defines the group set memberships (set Z contains groups X and Y, etc). The application's on-demand logic could translate a user request for set Z to an on-demand request for groups X, Y, etc. This still requires that you carry custom metadata that mirrors manifest data, and have the necessary app logic to translate sets to groups, but doesn't seem that difficult and should allow you to get the behavior you want.


  • !!!URGENT!!! Accessing the Application Manifest and Deployment Manifest at runtime