Deletion of a file from a Component is a Component Rule violation. In =
scenario, the deleted file can be "orphaned" on the user's machine. In =
other scenario, the deleted file may never added to the machine because =
Component is "already installed" thus the new file is not necessary.
Both create really bad situations on the user's machine that are =
painful to debug. Please, do not dismiss the Component Rules. They can
seriously hurt our users.
[mailto:wix-users-admin@...] On Behalf Of
Sent: Monday, February 07, 2005 5:07 AM
Subject: [WiX-users] RE: Tallow and big file sets
the tool is for helping the Setup author maintain a setup with many =
If a file is deleted from the disk, then it has to be removed from the =
otherwise the setup can't be built. So the tool does it for you in order =
save you the work to do it.
The protocol it generates, states which files are deleted from which
so that the author can afterwards decide wether he wants to change the =
the affected component or not.=20
It is up to the author to decide when a component rule is broken or not, =
tool just saves the author from the work of manually checking the whole =
list every time, and in the case no change has happened, it inform the
that the file list has remained stable, otherwise it performs the =
can automatically do, and leaves the author with a reasonable to-do =
BTW. Deletion of a file from a component does not necessarily mean that
component rules are broken, IMO.
Zitat von Vagmi Mudumbai=20
> Hi Stefan,
> As far as the WIX toolset is concerned, it need no know if the file
> has been changed. It would automatically read the relevant information
> from the file, like the version, size and it even writes the
> MsiFileHash table with the hash value (roughly the checksum) of the
> file. This is very useful while patching. Also you said that you were
> deleting files and folders from the wxs file. That is clearly a
> violation of component rules. This way, the file in the component gets
> removed and can cause seriouis inconsistencies during repair and other
> maintanance operations.
> This is how it used to work for us. Developers usually indicated the
> resource that can be deleted. What we do here is to set the transitive
> bit on the components and have it as fine grained as required. If the
> developer wants a file or a resource to be removed, we simple author
> the appropriate condition and poof... goes the resource during
> upgrade. However, on the flip side, you would have to maintain the
> latest good known file in your package and will be an overhead durin
> patch even if the only thing that you are going to do with that file
> is to delete it.
> On Mon, 7 Feb 2005 11:44:20 +0100, Stefan Zschocke
> <s.zschocke@...> wrote:
> > Hi,
> > My current extension work will do the following:
> > Take an existing wxs file and start from a given pair of =
> > or DirectoryRef on the one side and a filesystem folder on the other
> > side. The Directory/DirectoryRef is located by its Id (input =
> > to my routine) and the filesystem-directory is located by its path
> > (input parameter to my routine). My routine then recursively =
> > through the filesystem, thereby detecting new files and =
> > as well as deleted files and subdirectories. For the new directories =
> > adds new Directory-tags, this is straightforward.
> > For the new files it adds new files and possibly new components.
> > Concerning the new components: There is a boolean switch: One file =
> > component. If oneFilePerComponent is true, it adds a new component =
> > the new file and sets the file as keypath for the component. =
> > it checks wether there already is one component in this =
> > and uses it. Only if there is none, adds a new component.
> > For the deleted directories it deletes the Directory-node.
> > For the deleted files it deletes the File-node and if it was the =
> > one in the Component-node, deletes the Component, too.
> > For the directories and files which could be matched, it does =
> > This means that the existing tags (Directory, Component, File) =
> > unchanged including the Component-Guid which is kept.
> > It won't do anything actively with respect to component-rules. But =
> > will add a detailed comment-block to the output file, in which it
> > protocols the following: All deleted files, directories and =
> > Also if a whole directory tree is deleted, it will list the deleted
> > subdirectories, files and components therein. New components, files =
> > directories. Changed Components: The change means added or deleted =
> > within the component.
> > The Setup-author must then revise this protocol and decide himself
> > wether a component-rule is broken or not.
> > I think this can't be done on a general level, with the exception =
> > key-file of a component has been deleted. Otherwise, just adding or
> > removing a file of a multi-file component doesn't necessarily mean =
> > component-rules are broken. One can add an additional switch to the
> > tool, to specify that the Guid of Component with a key file deleted =
> > automatically be replaced by a new one, but generally the author =
> > decide, based on the protocol. Hence the need of a detailed
> > synchronization protocol.
> > The one thing which is lacking here, is the detection of file =
> > For this to acomplish, one needs more than the existing wxs and the =
> > system. One would need at least a checksum of the old files. It =
> > not necessarily suffice to have recorded the old file's datetime and
> > size. For example if java-docs are regenerated from unchanged java
> > sources, the file size remains the same, but the datetime doesn't. =
> > a binary comparison of the file contents will give a reliable result =
> > or otherwise a checksum. But where would one store these infos =
> > reliably detect file changes (datetime, size, checksum)?
> > One option would be to have them in additional attributes of the
> > File-tag in the wxs file. These attributes (or possibly one only, =
> > combines these values) would need to be added to the wix-schema,
> > otherwise the generated wxs wouldn't compile. So this would mean
> > changing the wix-schema and I guess there would be resistance in the
> > community.
> > Otherwise have them stored elsewhere, well can be done...
> > First I will implement the other stuff without detection of the file
> > changes...
> > Stefan
> > -----Urspr=FCngliche Nachricht-----
> > Von: wix-users-admin@...
> > [mailto:wix-users-admin@...] Im Auftrag von =
> > Payne
> > Gesendet: Montag, 7. Februar 2005 10:22
> > An: wix-users@...
> > Betreff: [WiX-users] Tallow and big file sets
> > For a few of the products I work on, we need to be able to install =
> > sets of files to go with the program (lots of sample documents, =
> > would also like to be able to support upgrades using patches so I =
> > to follow the component rules carefully.
> > I have been following the discussion about extending Tallow to =
> > large sets of files as I want to automate the installation of these
> > files.
> > I would like to work out how I can extend Tallow to support the =
> > need. To support large file sets, Tallow would need to cope with =
> > being modified, added, deleted and re-added (deleted and then put =
> > in the same place later on). For each of these, it is also possible
> > that the file might be the key file for a component. There seem to =
> > lot of tricky cases if all of these were to be supported. Deleting =
> > file that is the key file of a component doesn't seem like a good =
> > and re-adding a file that was deleted in a previous version might
> > require special care to make sure it ends up in the same component.
> > I am wondering if a lot of these would be made easier by having one =
> > per component. That way I could just store a unique ID for each =
> > install and every file would be a key file. I have tried to find =
> > one file per component would work by making a few test installers.
> > To install 10,000 files in 1,000 folders using 1,000 components (10
> > files per component):
> > Install time 54.062 seconds
> > Uninstall time 234.531 seconds
> > MSI size: 634,304 bytes
> > CAB size: 249,585 bytes
> > Install time per file: 5 ms
> > Uninstall time per file: 23 ms
> > MSI size file: 63.430 bytes
> > To install 10,000 files in 1,000 folders using 10,000 components (1 =
> > per component):
> > Install time 71.625 seconds
> > Uninstall time 258.891 seconds
> > MSI size: 1,315,076 bytes
> > CAB size: 249,585 bytes
> > Install time per file: 7 ms
> > Uninstall time per file: 26 ms
> > MSI size file: 132.508 bytes
> > For comparison using Explorer with 10,000 files in 1,000 folders: =
> > time: 45 seconds Delete time: 12 seconds
> > Both the installers were very basic MSI files and run with no UI. =
> > these figures, it seems that if I can put up with the MSI file being
> > 700kb bigger, I can get much simpler file management and patching. =
> > might also be possible to reduce the file size by picking the file =
> > component IDs carefully (I used IDs like "component9999" when I =
> > have compressed them down a bit).
> > So my question is would installing each file as a separate component =
> > a really bad idea and is there anything else I should consider when
> > managing large file sets with WiX / Windows Installer?
> > Jonathan
> > -------------------------------------------------------
> > This SF.Net email is sponsored by: IntelliVIEW -- Interactive =
> > Tool for open source databases. Create drag-&-drop reports. Save =
> > by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, =
> > Download a FREE copy at http://www.intelliview.com/go/osdn_nl
> > _______________________________________________
> > WiX-users mailing list
> > WiX-users@...
> > https://lists.sourceforge.net/lists/listinfo/wix-users
This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting
Tool for open source databases. Create drag-&-drop reports. Save time
by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc.
Download a FREE copy at http://www.intelliview.com/go/osdn_nl
WiX-users mailing list