diff options
author | Rob Mensching <rob@firegiant.com> | 2022-07-14 15:19:53 -0700 |
---|---|---|
committer | Rob Mensching <rob@firegiant.com> | 2022-07-14 16:02:24 -0700 |
commit | 229242cf7c328b89b5aa65ed7a04e33c8b93b393 (patch) | |
tree | de0a9547e73e46490b0946d6850228d5b30258b8 /src/samples/Dtf/Documents/Guide | |
parent | f46ca6a9dce91607ffc9855270dd6998216e1a8b (diff) | |
download | wix-229242cf7c328b89b5aa65ed7a04e33c8b93b393.tar.gz wix-229242cf7c328b89b5aa65ed7a04e33c8b93b393.tar.bz2 wix-229242cf7c328b89b5aa65ed7a04e33c8b93b393.zip |
Rename "samples" segment to "tools"
This segment is a bit of a "miscellaneous section" in the WiX repo.
As such it has been difficult to name. I originally eschewed the
name "tools" because what is in the "wix" segment was once called
"tools". However, now that wix.exe is firmly established as the
entry point for WiX operations, I've become comfortable with its
segment being named "wix". That meant "tools" was again available
and "tools" better describes the content of this section.
Diffstat (limited to 'src/samples/Dtf/Documents/Guide')
31 files changed, 0 insertions, 3222 deletions
diff --git a/src/samples/Dtf/Documents/Guide/Content/about.htm b/src/samples/Dtf/Documents/Guide/Content/about.htm deleted file mode 100644 index 393b5a81..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/about.htm +++ /dev/null | |||
@@ -1,59 +0,0 @@ | |||
1 | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
2 | <head> | ||
3 | <title>Deployment Tools Foundation Overview</title> | ||
4 | <link rel="stylesheet" type="text/css" href="../styles/presentation.css" /> | ||
5 | <link rel="stylesheet" type="text/css" href="ms-help://Hx/HxRuntime/HxLink.css" /> | ||
6 | </head> | ||
7 | |||
8 | <body> | ||
9 | |||
10 | <div id="control"> | ||
11 | <span class="productTitle">Deployment Tools Foundation</span><br /> | ||
12 | <span class="topicTitle">Deployment Tools Foundation</span><br /> | ||
13 | <div id="toolbar"> | ||
14 | <span id="chickenFeet"><span class="nolink">Overview</span></span> | ||
15 | <span id="languageFilter">v4.0</span> | ||
16 | </div> | ||
17 | </div> | ||
18 | <div id="main"> | ||
19 | <div id="header"> | ||
20 | </div> | ||
21 | <div class="summary"> | ||
22 | <p>Deployment Tools Foundation is a rich set of .NET class libraries and | ||
23 | related resources that together bring the Windows deployment platform | ||
24 | technologies into the .NET world. It is designed to greatly simplify | ||
25 | deployment-related development tasks while still exposing the complete | ||
26 | functionality of the underlying technology.</p> | ||
27 | |||
28 | <p>The primary focus of DTF is to provide a foundation for development of | ||
29 | various kinds of tools to support deployment throughout the product | ||
30 | lifecycle, including setup authoring, building, analysis, debugging, and | ||
31 | testing tools. In addition to tools, DTF can also be useful for install-time | ||
32 | activities such as setup bootstrappers, external UI, and custom actions, | ||
33 | and for application run-time activities that need to access the deployment | ||
34 | platform.</p> | ||
35 | |||
36 | <p>For a description of the the latest changes, see <a | ||
37 | href="whatsnew.htm">What's New</a>.</p> | ||
38 | |||
39 | </div> | ||
40 | |||
41 | <div id="footer"> | ||
42 | <p /> | ||
43 | Send comments on this topic to <a id="HT_MailLink" href="mailto:wix-users%40lists.sourceforge.net?Subject=Deployment Tools Foundation Documentation"> | ||
44 | wix-users@lists.sourceforge.net</a> | ||
45 | |||
46 | <script type="text/javascript"> | ||
47 | var HT_mailLink = document.getElementById("HT_MailLink"); | ||
48 | var HT_mailLinkText = HT_mailLink.innerHTML; | ||
49 | HT_mailLink.href += ": " + document.title; | ||
50 | HT_mailLink.innerHTML = HT_mailLinkText; | ||
51 | </script> | ||
52 | |||
53 | <p /> | ||
54 | |||
55 | </div> | ||
56 | </div> | ||
57 | |||
58 | </body> | ||
59 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/buildingcas.htm b/src/samples/Dtf/Documents/Guide/Content/buildingcas.htm deleted file mode 100644 index e88ad552..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/buildingcas.htm +++ /dev/null | |||
@@ -1,94 +0,0 @@ | |||
1 | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
2 | <head> | ||
3 | <title>Building Managed Custom Actions</title> | ||
4 | <link rel="stylesheet" type="text/css" href="../styles/presentation.css" /> | ||
5 | <link rel="stylesheet" type="text/css" href="ms-help://Hx/HxRuntime/HxLink.css" /> | ||
6 | </head> | ||
7 | |||
8 | <body> | ||
9 | |||
10 | <div id="control"> | ||
11 | <span class="productTitle">Deployment Tools Foundation</span><br /> | ||
12 | <span class="topicTitle">Building Managed Custom Actions</span><br /> | ||
13 | <div id="toolbar"> | ||
14 | <span id="chickenFeet"> | ||
15 | <a href="using.htm">Development Guide</a> > | ||
16 | <a href="managedcas.htm">Managed CAs</a> > | ||
17 | <span class="nolink">Building</span> | ||
18 | </span> | ||
19 | </div> | ||
20 | </div> | ||
21 | <div id="main"> | ||
22 | <div id="header"> | ||
23 | </div> | ||
24 | <div class="summary"> | ||
25 | |||
26 | <p>The build process for managed CA DLLs is a little complicated becuase of the | ||
27 | proxy-wrapper and dll-export requirements. Here's an overview:</p> | ||
28 | <ol> | ||
29 | <li> | ||
30 | <p>Compile your CA assembly, which references WixToolset.Dtf.WindowsInstaller.dll and | ||
31 | marks exported custom actions with a CustomActionAttribute.</p> | ||
32 | <li> | ||
33 | <p>Package the CA assembly, CustomAction.config, WixToolset.Dtf.WindowsInstaller.dll, | ||
34 | and any other dependencies using <b>MakeSfxCA.exe</b>. The filenames of CustomAction.config | ||
35 | and WixToolset.Dtf.WindowsInstaller.dll must not be changed, since | ||
36 | the custom action proxy specifically looks for those files.</p> | ||
37 | </ol> | ||
38 | <p><br> | ||
39 | </p> | ||
40 | <p><b>Compiling</b></p> | ||
41 | <pre><font face="Consolas, Courier New"> | ||
42 | csc.exe | ||
43 | /target:library | ||
44 | /r:$(DTFbin)\WixToolset.Dtf.WindowsInstaller.dll | ||
45 | /out:SampleCAs.dll | ||
46 | *.cs | ||
47 | </font></pre> | ||
48 | <p><b>Wrapping</b><pre><font face="Consolas, Courier New"> | ||
49 | MakeSfxCA.exe | ||
50 | $(OutDir)\SampleCAsPackage.dll | ||
51 | $(DTFbin)\SfxCA.dll | ||
52 | SampleCAs.dll | ||
53 | CustomAction.config | ||
54 | $(DTFbin)\WixToolset.Dtf.WindowsInstaller.dll | ||
55 | </font></pre> | ||
56 | </p> | ||
57 | <p>Now the resulting package, SampleCAsPackage.dll, is ready to be inserted | ||
58 | into the Binary table of the MSI.</p> | ||
59 | <p><br/> | ||
60 | </p> | ||
61 | <p>For a working example of building a managed custom action package | ||
62 | you can look at included sample ManagedCAs project.</p> | ||
63 | <p><br/> | ||
64 | </p> | ||
65 | |||
66 | <p><br/></p> | ||
67 | <p><b>See also:</b></p> | ||
68 | <ul> | ||
69 | <li><a href="writingcas.htm">Writing Managed Custom Actions</a></li> | ||
70 | <li><a href="caconfig.htm">Specifying the Runtime Version</a></li> | ||
71 | </ul> | ||
72 | <p><br/></p> | ||
73 | |||
74 | </div> | ||
75 | |||
76 | <div id="footer"> | ||
77 | <p /> | ||
78 | Send comments on this topic to <a id="HT_MailLink" href="mailto:wix-users%40lists.sourceforge.net?Subject=Deployment Tools Foundation Documentation"> | ||
79 | wix-users@lists.sourceforge.net</a> | ||
80 | |||
81 | <script type="text/javascript"> | ||
82 | var HT_mailLink = document.getElementById("HT_MailLink"); | ||
83 | var HT_mailLinkText = HT_mailLink.innerHTML; | ||
84 | HT_mailLink.href += ": " + document.title; | ||
85 | HT_mailLink.innerHTML = HT_mailLinkText; | ||
86 | </script> | ||
87 | |||
88 | <p /> | ||
89 | |||
90 | </div> | ||
91 | </div> | ||
92 | |||
93 | </body> | ||
94 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/cabpack.htm b/src/samples/Dtf/Documents/Guide/Content/cabpack.htm deleted file mode 100644 index 2d9f725e..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/cabpack.htm +++ /dev/null | |||
@@ -1,63 +0,0 @@ | |||
1 | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
2 | <head> | ||
3 | <title>Archive Pack/Unpack Tool</title> | ||
4 | <link rel="stylesheet" type="text/css" href="../styles/presentation.css" /> | ||
5 | <link rel="stylesheet" type="text/css" href="ms-help://Hx/HxRuntime/HxLink.css" /> | ||
6 | </head> | ||
7 | |||
8 | <body> | ||
9 | |||
10 | <div id="control"> | ||
11 | <span class="productTitle">Deployment Tools Foundation</span><br /> | ||
12 | <span class="topicTitle">Archive Pack/Unpack Tool</span><br /> | ||
13 | <div id="toolbar"> | ||
14 | <span id="chickenFeet"> | ||
15 | <a href="using.htm">Development Guide</a> > | ||
16 | <a href="samples.htm">Samples</a> > | ||
17 | <span class="nolink">XPack</span> | ||
18 | </span> | ||
19 | </div> | ||
20 | </div> | ||
21 | <div id="main"> | ||
22 | <div id="header"> | ||
23 | </div> | ||
24 | <div class="summary"> | ||
25 | <p><pre><font face="Consolas, Courier New">Usage: CabPack.exe <directory> <package.cab> | ||
26 | Usage: XPack /P <archive.cab> <directory> | ||
27 | Usage: XPack /P <archive.zip> <directory> | ||
28 | |||
29 | Packs all files in a directory tree into an archive, | ||
30 | using either the cab or zip format. Any existing archive | ||
31 | with the same name will be overwritten. | ||
32 | |||
33 | |||
34 | Usage: XPack /U <archive.cab> <directory> | ||
35 | Usage: XPack /U <archive.zip> <directory> | ||
36 | |||
37 | Unpacks all files from a cab or zip archive to the | ||
38 | specified directory. Any existing files with the same | ||
39 | names will be overwritten.</font></pre> | ||
40 | </p> | ||
41 | <p><br/></p> | ||
42 | |||
43 | </div> | ||
44 | |||
45 | <div id="footer"> | ||
46 | <p /> | ||
47 | Send comments on this topic to <a id="HT_MailLink" href="mailto:wix-users%40lists.sourceforge.net?Subject=Deployment Tools Foundation Documentation"> | ||
48 | wix-users@lists.sourceforge.net</a> | ||
49 | |||
50 | <script type="text/javascript"> | ||
51 | var HT_mailLink = document.getElementById("HT_MailLink"); | ||
52 | var HT_mailLinkText = HT_mailLink.innerHTML; | ||
53 | HT_mailLink.href += ": " + document.title; | ||
54 | HT_mailLink.innerHTML = HT_mailLinkText; | ||
55 | </script> | ||
56 | |||
57 | <p /> | ||
58 | |||
59 | </div> | ||
60 | </div> | ||
61 | |||
62 | </body> | ||
63 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/cabs.htm b/src/samples/Dtf/Documents/Guide/Content/cabs.htm deleted file mode 100644 index e88d1e15..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/cabs.htm +++ /dev/null | |||
@@ -1,101 +0,0 @@ | |||
1 | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
2 | <head> | ||
3 | <title>Working with Cabinet Files</title> | ||
4 | <link rel="stylesheet" type="text/css" href="../styles/presentation.css" /> | ||
5 | <link rel="stylesheet" type="text/css" href="ms-help://Hx/HxRuntime/HxLink.css" /> | ||
6 | </head> | ||
7 | |||
8 | <body> | ||
9 | |||
10 | <div id="control"> | ||
11 | <span class="productTitle">Deployment Tools Foundation</span><br /> | ||
12 | <span class="topicTitle">Working with Cabinet Files</span><br /> | ||
13 | <div id="toolbar"> | ||
14 | <span id="chickenFeet"> | ||
15 | <a href="using.htm">Development Guide</a> > | ||
16 | <span class="nolink">Cabinet Files</span> | ||
17 | </span> | ||
18 | </div> | ||
19 | </div> | ||
20 | <div id="main"> | ||
21 | <div id="header"> | ||
22 | </div> | ||
23 | <div class="summary"> | ||
24 | |||
25 | <h3>Creating a cabinet</h3> | ||
26 | <pre><font face="Consolas, Courier New"> CabInfo cabInfo = <font color="blue">new</font> CabInfo(<font color="purple">"package.cab"</font>); | ||
27 | cabInfo.Pack(<font color="purple">"D:\\FilesToCompress"</font>);</font></pre><br /> | ||
28 | <p>1. Create a <a href="DTFAPI.chm::/html/M_Microsoft_Deployment_Compression_Cab_CabInfo__ctor_1.htm">new CabInfo</a> instance referring to the (future) location of the .cab file.</p> | ||
29 | <p>2. Compress files:</p><ul> | ||
30 | <li>Easily compress an entire directory with the <a href="DTFAPI.chm::/html/Overload_Microsoft_Deployment_Compression_ArchiveInfo_Pack.htm">Pack</a> method.</li> | ||
31 | <li>Compress a specific list of exernal and internal filenames with the <a href="DTFAPI.chm::/html/Overload_Microsoft_Deployment_Compression_ArchiveInfo_PackFiles.htm">PackFiles</a> method.</li> | ||
32 | <li>Compress a dictionary mapping of internal to external filenames with the <a href="DTFAPI.chm::/html/Overload_Microsoft_Deployment_Compression_ArchiveInfo_PackFileSet.htm">PackFileSet</a> method.</li> | ||
33 | </ul> | ||
34 | |||
35 | <p><br/></p> | ||
36 | <h3>Listing a cabinet</h3> | ||
37 | <pre><font face="Consolas, Courier New"> CabInfo cabInfo = <font color="blue">new</font> CabInfo(<font color="purple">"package.cab"</font>); | ||
38 | <font color="blue">foreach</font> (CabFileInfo fileInfo <font color="blue">in</font> cabInfo.GetFiles()) | ||
39 | Console.WriteLine(fileInfo.Name + <font color="purple">"\t"</font> + fileInfo.Length);</font></pre><br /> | ||
40 | <p>1. Create a <a href="DTFAPI.chm::/html/M_Microsoft_Deployment_Compression_Cab_CabInfo__ctor_1.htm">new CabInfo</a> instance referring to the location of the .cab file.</p> | ||
41 | <p>2. Enumerate files returned by the <a href="DTFAPI.chm::/html/Overload_Microsoft_Deployment_Compression_Cab_CabInfo_GetFiles.htm">GetFiles</a> method.</p><ul> | ||
42 | <li>Each <a href="DTFAPI.chm::/html/T_Microsoft_Deployment_Compression_Cab_CabFileInfo.htm">CabFileInfo</a> instance contains metadata about one file.</li> | ||
43 | </ul> | ||
44 | |||
45 | <p><br/></p> | ||
46 | <h3>Extracting a cabinet</h3> | ||
47 | <pre><font face="Consolas, Courier New"> CabInfo cabInfo = <font color="blue">new</font> CabInfo(<font color="purple">"package.cab"</font>); | ||
48 | cabInfo.Unpack(<font color="purple">"D:\\ExtractedFiles"</font>);</font></pre><br /> | ||
49 | <p>1. Create a <a href="DTFAPI.chm::/html/M_Microsoft_Deployment_Compression_Cab_CabInfo__ctor_1.htm">new CabInfo</a> instance referring to the location of the .cab file.</p> | ||
50 | <p>2. Extract files:</p><ul> | ||
51 | <li>Easily extract all files to a directory with the <a href="DTFAPI.chm::/html/Overload_Microsoft_Deployment_Compression_ArchiveInfo_Unpack.htm">Unpack</a> method.</li> | ||
52 | <li>Easily extract a single file with the <a href="DTFAPI.chm::/html/M_Microsoft_Deployment_Compression_ArchiveInfo_UnpackFile.htm">UnpackFile</a> method.</li> | ||
53 | <li>Extract a specific list of filenames with the <a href="DTFAPI.chm::/html/Overload_Microsoft_Deployment_Compression_ArchiveInfo_UnpackFiles.htm">UnpackFiles</a> method.</li> | ||
54 | <li>Extract a dictionary mapping of internal to external filenames with the <a href="DTFAPI.chm::/html/Overload_Microsoft_Deployment_Compression_ArchiveInfo_UnpackFileSet.htm">UnpackFileSet</a> method.</li> | ||
55 | </ul> | ||
56 | |||
57 | <p><br/></p> | ||
58 | <h3>Getting progress</h3> | ||
59 | Most cabinet operation methods have an overload that allows you to specify a event handler | ||
60 | for receiving <a href="DTFAPI.chm::/html/T_Microsoft_Deployment_Compression_ArchiveProgressEventArgs.htm">archive | ||
61 | progress events</a>. The <a href="cabpack.htm">XPack sample</a> | ||
62 | demonstrates use of the callback to report detailed progress to the console. | ||
63 | |||
64 | <p><br/></p> | ||
65 | <h3>Stream-based compression</h3> | ||
66 | The CabEngine class contains static methods for performing compression/decompression operations directly | ||
67 | on any kind of Stream. However these methods are more difficult to use, since the caller must implement a | ||
68 | <a href="DTFAPI.chm::/html/T_Microsoft_Deployment_Compression_ArchiveFileStreamContext.htm">stream context</a> | ||
69 | that provides the file metadata which would otherwise have been provided by the filesystem. The CabInfo class | ||
70 | uses the CabEngine class with FileStreams to provide the more traditional file-based interface. | ||
71 | |||
72 | <p><br/></p> | ||
73 | <p><b>See also:</b></p> | ||
74 | <ul> | ||
75 | <li><a href="DTFAPI.chm::/html/T_Microsoft_Deployment_Compression_Cab_CabInfo.htm">CabInfo class</a></li> | ||
76 | <li><a href="DTFAPI.chm::/html/T_Microsoft_Deployment_Compression_Cab_CabEngine.htm">CabEngine class</a></li> | ||
77 | <li><a href="cabpack.htm">XPack Sample Tool</a></li> | ||
78 | </ul> | ||
79 | <p><br/></p> | ||
80 | |||
81 | </div> | ||
82 | |||
83 | <div id="footer"> | ||
84 | <p /> | ||
85 | Send comments on this topic to <a id="HT_MailLink" href="mailto:wix-users%40lists.sourceforge.net?Subject=Deployment Tools Foundation Documentation"> | ||
86 | wix-users@lists.sourceforge.net</a> | ||
87 | |||
88 | <script type="text/javascript"> | ||
89 | var HT_mailLink = document.getElementById("HT_MailLink"); | ||
90 | var HT_mailLinkText = HT_mailLink.innerHTML; | ||
91 | HT_mailLink.href += ": " + document.title; | ||
92 | HT_mailLink.innerHTML = HT_mailLinkText; | ||
93 | </script> | ||
94 | |||
95 | <p /> | ||
96 | |||
97 | </div> | ||
98 | </div> | ||
99 | |||
100 | </body> | ||
101 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/cabwrapper.htm b/src/samples/Dtf/Documents/Guide/Content/cabwrapper.htm deleted file mode 100644 index fd88437c..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/cabwrapper.htm +++ /dev/null | |||
@@ -1,63 +0,0 @@ | |||
1 | <!doctype HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > | ||
2 | <html> | ||
3 | <head> | ||
4 | <title>Managed Wrapper Library for Cabinet APIs</title> | ||
5 | <meta http-equiv="Content-Type" content="text/html; charset=Windows-1252"> | ||
6 | <link rel="stylesheet" type="text/css" href="MSDN.css"> | ||
7 | </head> | ||
8 | <body id="bodyID" class="dtBODY"> | ||
9 | <div id="nsbanner"> | ||
10 | <div id="bannerrow1"> | ||
11 | <table class="bannerparthead" cellspacing="0" id="Table1"> | ||
12 | <tr id="hdr"> | ||
13 | <td class="runninghead">Managed Libraries for Windows Installer</td> | ||
14 | <td class="product"></td> | ||
15 | </tr> | ||
16 | </table> | ||
17 | </div> | ||
18 | <div id="TitleRow"> | ||
19 | <h1 class="dtH1">Managed Wrapper Library for Cabinet APIs</h1> | ||
20 | </div> | ||
21 | </div> | ||
22 | <div id="nstext"> | ||
23 | <p>This is a managed library that provides the ability to | ||
24 | create and extract cabinet files. It uses cabinet.dll (present on all versions of Windows) | ||
25 | to do the actual compression/decompression. It provides access to nearly all | ||
26 | cabinet capabilities, including spanning of multiple cab files. It even has support for | ||
27 | preserving directory structures and UTF8 paths.</p> | ||
28 | <p>There are two ways to use the library. <a href="ms-its:MMLRef.chm::/Microsoft.Cab.CabinetInfo.html">CabinetInfo</a> | ||
29 | and <a href="ms-its:MMLRef.chm::/Microsoft.Cab.CabinetFileInfo.html">CabinetFileInfo</a> | ||
30 | (similar to DirectoryInfo and FileInfo respectively) | ||
31 | provide high-level object-oriented methods for doing common file-based cabinet creation and | ||
32 | extraction tasks. On the other hand, the <a href="ms-its:MMLRef.chm::/Microsoft.Cab.Cabinet.html">Cabinet</a> | ||
33 | class provides low-level access to all | ||
34 | functionality, and operates completely in terms of .NET Streams. The previous two classes use | ||
35 | the Cabinet class to do all the actual work.</p> | ||
36 | <p>There are also two ways to build the library. | ||
37 | Compiling it normally will produce the fully functional | ||
38 | library in the <a href="ms-its:MMLRef.chm::/Microsoft.Cab.html">Microsoft.Cab</a> | ||
39 | namespace, while compiling it with the <tt>/D:CABMINIMAL | ||
40 | /D:CABEXTRACTONLY</tt> flags will create a compact assembly with only the core extraction | ||
41 | functionality, in the <a href="ms-its:MMLRef.chm::/Microsoft.Cab.MiniExtract.html">Microsoft.Cab.MiniExtract</a> | ||
42 | namespace.</p> | ||
43 | <p>The cabinet library interops with native cabinet APIs which use the 'cdecl' | ||
44 | calling-convention. When building against .NET Framework versions before 2.0, | ||
45 | this library requires a special post-build step to process the UnmanagedFunctionPointerAttribute. | ||
46 | If you use this code in another assembly, don't forget to run <a href="augmentil.htm">AugmentIL</a> | ||
47 | on it to fix the delegate calling-conventions, otherwise you will encounter a | ||
48 | NullReferenceException when attempting to call the cabinet APIs. When building against | ||
49 | .NET Framework version 2.0 or later, the UnmanagedFunctionPointerAttribute.cs source file | ||
50 | should be omitted.</p> | ||
51 | |||
52 | <p><br/></p> | ||
53 | <p><b>See also:</b></p> | ||
54 | <ul> | ||
55 | <li><a href="cabs.htm">Working with Cabinet Files</a></li> | ||
56 | <li><a href="ms-its:MMLRef.chm::/Microsoft.Cab.CabinetInfoMethods.html">CabinetInfo Methods</a></li> | ||
57 | <li><a href="ms-its:MMLRef.chm::/Microsoft.Cab.CabinetMethods.html">Cabinet Methods</a></li> | ||
58 | <li><a href="cabpack.htm">CabPack Sample Tool</a></li> | ||
59 | </ul> | ||
60 | <p><br/></p> | ||
61 | </div> | ||
62 | </body> | ||
63 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/caconfig.htm b/src/samples/Dtf/Documents/Guide/Content/caconfig.htm deleted file mode 100644 index a6c97d2b..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/caconfig.htm +++ /dev/null | |||
@@ -1,83 +0,0 @@ | |||
1 | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
2 | <head> | ||
3 | <title>Specifying the Runtime Version</title> | ||
4 | <link rel="stylesheet" type="text/css" href="../styles/presentation.css" /> | ||
5 | <link rel="stylesheet" type="text/css" href="ms-help://Hx/HxRuntime/HxLink.css" /> | ||
6 | </head> | ||
7 | |||
8 | <body> | ||
9 | |||
10 | <div id="control"> | ||
11 | <span class="productTitle">Deployment Tools Foundation</span><br /> | ||
12 | <span class="topicTitle">Specifying the Runtime Version</span><br /> | ||
13 | <div id="toolbar"> | ||
14 | <span id="chickenFeet"> | ||
15 | <a href="using.htm">Development Guide</a> > | ||
16 | <a href="managedcas.htm">Managed CAs</a> > | ||
17 | <a href="writingcas.htm">Writing CAs</a> > | ||
18 | <span class="nolink">CustomAction.config</span> | ||
19 | </span> | ||
20 | </div> | ||
21 | </div> | ||
22 | <div id="main"> | ||
23 | <div id="header"> | ||
24 | </div> | ||
25 | <div class="summary"> | ||
26 | |||
27 | <p>Every managed custom action package should contain a CustomAction.config file, even though it is not required by the toolset. | ||
28 | Here is a sample:</p><pre><font face="Consolas, Courier New"> | ||
29 | <?xml version="1.0" encoding="utf-8" ?> | ||
30 | <configuration> | ||
31 | <startup> | ||
32 | <supportedRuntime version="v2.0.50727"/> | ||
33 | </startup> | ||
34 | </configuration></font></pre><br /> | ||
35 | <p>The configuration file follows the standard schema for .NET Framework | ||
36 | configuration files <a target=_blank href="http://msdn2.microsoft.com/en-us/library/9w519wzk(VS.80).aspx">documented on MSDN</a>.</p> | ||
37 | <p><br/></p> | ||
38 | <p><b>Supported Runtime Version</b></p> | ||
39 | <p>In the startup section, use <a target=_blank href="http://msdn2.microsoft.com/en-us/library/w4atty68(VS.80).aspx">supportedRuntime</a> | ||
40 | tags to explicitly specify the version(s) of the .NET Framework that the custom action should run on. | ||
41 | If no versions are specified, the chosen version of the .NET Framework will be | ||
42 | the "best" match to what WixToolset.Dtf.WindowsInstaller.dll was built against.</p> | ||
43 | <p><font color="red"><b>Warning: leaving the version unspecified is dangerous</b></font> | ||
44 | as it introduces a risk of compatibility problems with future versions of the .NET Framework. | ||
45 | It is highly recommended that you specify only the version(s) | ||
46 | of the .NET Framework that you have tested against.</p> | ||
47 | <p><br/></p> | ||
48 | |||
49 | <p><b>Other Configuration</b></p> | ||
50 | <p>Various other kinds of configuration settings may also be added to this file, as it is a standard | ||
51 | <a target=_blank href="http://msdn2.microsoft.com/en-us/library/kza1yk3a(VS.80).aspx">.NET Framework application config file</a> | ||
52 | for the custom action.</p> | ||
53 | <p><br/></p> | ||
54 | |||
55 | <p><b>See also:</b></p> | ||
56 | <ul> | ||
57 | <li><a href="writingcas.htm">Writing Managed Custom Actions</a></li> | ||
58 | <li><a href="buildingcas.htm">Building Managed Custom Actions</a></li> | ||
59 | <li><a href="caproxy.htm">Proxy for Managed Custom Actions</a></li> | ||
60 | </ul> | ||
61 | <p><br/></p> | ||
62 | |||
63 | </div> | ||
64 | |||
65 | <div id="footer"> | ||
66 | <p /> | ||
67 | Send comments on this topic to <a id="HT_MailLink" href="mailto:wix-users%40lists.sourceforge.net?Subject=Deployment Tools Foundation Documentation"> | ||
68 | wix-users@lists.sourceforge.net</a> | ||
69 | |||
70 | <script type="text/javascript"> | ||
71 | var HT_mailLink = document.getElementById("HT_MailLink"); | ||
72 | var HT_mailLinkText = HT_mailLink.innerHTML; | ||
73 | HT_mailLink.href += ": " + document.title; | ||
74 | HT_mailLink.innerHTML = HT_mailLinkText; | ||
75 | </script> | ||
76 | |||
77 | <p /> | ||
78 | |||
79 | </div> | ||
80 | </div> | ||
81 | |||
82 | </body> | ||
83 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/caproxy.htm b/src/samples/Dtf/Documents/Guide/Content/caproxy.htm deleted file mode 100644 index 2ee962d5..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/caproxy.htm +++ /dev/null | |||
@@ -1,74 +0,0 @@ | |||
1 | <!doctype HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > | ||
2 | <html> | ||
3 | <head> | ||
4 | <title>Proxy Class for Managed Custom Actions</title> | ||
5 | <meta http-equiv="Content-Type" content="text/html; charset=Windows-1252"> | ||
6 | <link rel="stylesheet" type="text/css" href="MSDN.css"> | ||
7 | </head> | ||
8 | <body id="bodyID" class="dtBODY"> | ||
9 | <div id="nsbanner"> | ||
10 | <div id="bannerrow1"> | ||
11 | <table class="bannerparthead" cellspacing="0" id="Table1"> | ||
12 | <tr id="hdr"> | ||
13 | <td class="runninghead">Managed Libraries for Windows Installer</td> | ||
14 | <td class="product"></td> | ||
15 | </tr> | ||
16 | </table> | ||
17 | </div> | ||
18 | <div id="TitleRow"> | ||
19 | <h1 class="dtH1">Proxy for Managed Custom Actions</h1> | ||
20 | </div> | ||
21 | </div> | ||
22 | <div id="nstext"> | ||
23 | <p>The custom action proxy allows an MSI developer to write | ||
24 | custom actions in managed code, while maintaing all the advantages of type 1 | ||
25 | DLL custom actions including full access to installer state, properties, | ||
26 | and the session database.</p> | ||
27 | <p>There are generally four problems that needed to be | ||
28 | solved in order to create a type 1 custom action in managed code:</p> | ||
29 | <ol> | ||
30 | <li><p><strong>Exporting the CA function as a native entry point callable by | ||
31 | MSI:</strong> The Windows Installer engine expects to call a LoadLibrary and | ||
32 | GetProcAddress on the custom action DLL, so an unmanaged DLL needs to implement | ||
33 | the function that is initially called by MSI and ultimately returns the result. | ||
34 | This function acts as a proxy to relay the custom action call into the | ||
35 | managed custom action assembly, and relay the result back to the caller. </p> | ||
36 | <li><strong>Providing supporting assemblies without | ||
37 | requiring them to be installed as files:</strong> If a DLL custom | ||
38 | action runs before the product's files are installed, then it is difficult | ||
39 | to provide any supporting files, because of the way the CA DLL is singly | ||
40 | extracted and executed from a temp file. (This can be a problem for | ||
41 | unmanaged CAs as well.) With managed custom actions we have already hit | ||
42 | that problem since both the CA assembly and the MSI wrapper assembly | ||
43 | need to be loaded. To solve this, the proxy DLL carries an appended | ||
44 | cab package. When invoked, it will extract all contents of the | ||
45 | cab package to a temporary working directory. This way the cab package can | ||
46 | carry any arbitrary dependencies the custom action may require.</li> | ||
47 | <li><p><strong>Hosting and configuring the Common Language Runtime:</strong> | ||
48 | In order to invoke a method in a managed assembly from a previously | ||
49 | unmanaged process, the CLR needs to be "hosted". This involves choosing | ||
50 | the correct version of the .NET Framework to use out of the available | ||
51 | version(s) on the system, binding that version to the current process, and | ||
52 | configuring it to load assemblies from the temporary working directory.</p> | ||
53 | <li><p><strong>Converting the integer session handle into a | ||
54 | Session object:</strong> The <a href="">Session</a> class in the managed | ||
55 | wrapper library has a constructor which takes an integer session handle as | ||
56 | its parameter. So the proxy simply instantiates this object before | ||
57 | calling the real CA function.</p> | ||
58 | </ol> | ||
59 | <p>The unmanaged CAPack module, when used in combination with the managed proxy in | ||
60 | the | ||
61 | Microsoft.WindowsInstaller assembly, accomplishes the tasks above to enable | ||
62 | fully-functional managed DLL custom actions.</p> | ||
63 | <p><br/></p> | ||
64 | <p><b>See also:</b></p> | ||
65 | <ul> | ||
66 | <li><a href="writingcas.htm">Writing Managed Custom Actions</a></li> | ||
67 | <li><a href="caconfig.htm">Writing the CustomAction.config file</a></li> | ||
68 | <li><a href="samplecas.htm">Sample C# Custom Actions</a></li> | ||
69 | <li><a href="buildingcas.htm">Building Managed Custom Actions</a></li> | ||
70 | </ul> | ||
71 | <p><br/></p> | ||
72 | </div> | ||
73 | </body> | ||
74 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/databases.htm b/src/samples/Dtf/Documents/Guide/Content/databases.htm deleted file mode 100644 index 4fe1fba9..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/databases.htm +++ /dev/null | |||
@@ -1,120 +0,0 @@ | |||
1 | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
2 | <head> | ||
3 | <title>Working with MSI Databases</title> | ||
4 | <link rel="stylesheet" type="text/css" href="../styles/presentation.css" /> | ||
5 | <link rel="stylesheet" type="text/css" href="ms-help://Hx/HxRuntime/HxLink.css" /> | ||
6 | </head> | ||
7 | |||
8 | <body> | ||
9 | |||
10 | <div id="control"> | ||
11 | <span class="productTitle">Deployment Tools Foundation</span><br /> | ||
12 | <span class="topicTitle">Working with MSI Databases</span><br /> | ||
13 | <div id="toolbar"> | ||
14 | <span id="chickenFeet"> | ||
15 | <a href="using.htm">Development Guide</a> > | ||
16 | <span class="nolink">MSI Databases</span> | ||
17 | </span> | ||
18 | </div> | ||
19 | </div> | ||
20 | <div id="main"> | ||
21 | <div id="header"> | ||
22 | </div> | ||
23 | <div class="summary"> | ||
24 | |||
25 | <h3>Querying a database</h3> | ||
26 | <pre><font face="Consolas, Courier New"> <font color=blue>using</font> (Database db = <font color=blue>new</font> Database(<font color="purple">"product.msi"</font>, DatabaseOpenMode.ReadOnly)) | ||
27 | { | ||
28 | <font color=blue>string</font> value = (<font color=blue>string</font>) db.ExecuteScalar( | ||
29 | <font color="purple">"SELECT `Value` FROM `Property` WHERE `Property` = '{0}'"</font>, propName); | ||
30 | }</font></pre><br /> | ||
31 | <p>1. Create a <a href="DTFAPI.chm::/html/Overload_Microsoft_Deployment_WindowsInstaller_Database__ctor.htm">new Database</a> | ||
32 | instance referring to the location of the .msi or .msm file.</p> | ||
33 | <p>2. Execute the query:</p><ul> | ||
34 | <li>The <a href="DTFAPI.chm::/html/Overload_Microsoft_Deployment_WindowsInstaller_Database_ExecuteScalar.htm">ExecuteScalar</a> | ||
35 | method is a shortcut for opening a view, executing the view, and fetching a single value.</li> | ||
36 | <li>The <a href="DTFAPI.chm::/html/Overload_Microsoft_Deployment_WindowsInstaller_Database_ExecuteQuery.htm">ExecuteQuery</a> | ||
37 | method is a shortcut for opening a view, executing the view, and fetching all values.</li> | ||
38 | <li>Or do it all manually with <a href="DTFAPI.chm::/html/M_Microsoft_Deployment_WindowsInstaller_Database_OpenView.htm">Database.OpenView</a>, | ||
39 | <a href="DTFAPI.chm::/html/Overload_Microsoft_Deployment_WindowsInstaller_View_Execute.htm">View.Execute</a>, and | ||
40 | <a href="DTFAPI.chm::/html/M_Microsoft_Deployment_WindowsInstaller_View_Fetch.htm">View.Fetch</a>.</li> | ||
41 | </ul> | ||
42 | |||
43 | <p><br/></p> | ||
44 | <h3>Updating a binary</h3> | ||
45 | <pre><font face="Consolas, Courier New"> Database db = <font color=blue>null</font>; | ||
46 | View view = <font color=blue>null</font>; | ||
47 | Record rec = <font color=blue>null</font>; | ||
48 | <font color=blue>try</font> | ||
49 | { | ||
50 | db = <font color=blue>new</font> Database(<font color="purple">"product.msi"</font>, DatabaseOpenMode.Direct); | ||
51 | view = db.OpenView(<font color="purple">"UPDATE `Binary` SET `Data` = ? WHERE `Name` = '{0}'"</font>, binName)) | ||
52 | rec = <font color=blue>new</font> Record(1); | ||
53 | rec.SetStream(1, binFile); | ||
54 | view.Execute(rec); | ||
55 | db.Commit(); | ||
56 | } | ||
57 | <font color=blue>finally</font> | ||
58 | { | ||
59 | <font color=blue>if</font> (rec != <font color=blue>null</font>) rec.Close(); | ||
60 | <font color=blue>if</font> (view != <font color=blue>null</font>) view.Close(); | ||
61 | <font color=blue>if</font> (db != <font color=blue>null</font>) db.Close(); | ||
62 | }</font></pre><br /> | ||
63 | <p>1. Create a <a href="DTFAPI.chm::/html/Overload_Microsoft_Deployment_WindowsInstaller_Database__ctor.htm">new Database</a> | ||
64 | instance referring to the location of the .msi or .msm file.</p> | ||
65 | <p>2. Open a view by calling one of the <a href="DTFAPI.chm::/html/M_Microsoft_Deployment_WindowsInstaller_Database_OpenView.htm">Database.OpenView</a> overloads.</p><ul> | ||
66 | <li>Parameters can be substituted in the SQL string using the String.Format syntax.</li> | ||
67 | </ul> | ||
68 | <p>3. Create a record with one field containing the new binary value.</p> | ||
69 | <p>4. Execute the view by calling one of the <a href="DTFAPI.chm::/html/Overload_Microsoft_Deployment_WindowsInstaller_View_Execute.htm">View.Execute</a> overloads.</p><ul> | ||
70 | <li>A record can be supplied for substitution of field tokens (?) in the query.</li> | ||
71 | </ul> | ||
72 | <p>5. <a href="DTFAPI.chm::/html/M_Microsoft_Deployment_WindowsInstaller_Database_Commit.htm">Commit</a> the Database.</p> | ||
73 | <p>6. <a href="DTFAPI.chm::/html/M_Microsoft_Deployment_WindowsInstaller_InstallerHandle_Close.htm">Close</a> the handles.</p> | ||
74 | |||
75 | <p><br/></p> | ||
76 | <h3>About handles</h3> | ||
77 | <p>Handle objects (Database, View, Record, SummaryInfo, Session) will remain open until | ||
78 | they are explicitly closed or until the objects are collected by the GC. So for the tightest | ||
79 | code, handle objects should be explicitly closed when they are no longer needed, | ||
80 | since closing them can release significant resources, and too many unnecessary | ||
81 | open handles can degrade performance. This is especially important within a loop | ||
82 | construct: for example when iterating over all the Records in a table, it is much cleaner | ||
83 | and faster to close each Record after it is used.</p> | ||
84 | <p>The handle classes in the managed library all extend the | ||
85 | <a href="DTFAPI.chm::/html/T_Microsoft_Deployment_WindowsInstaller_InstallerHandle.htm">InstallerHandle</a> | ||
86 | class, which implements the IDisposable interface. This makes them easily managed with C#'s | ||
87 | using statement. Alternatively, they can be closed in a finally block.</p> | ||
88 | <p>As a general rule, <i>methods</i> in the library return new handle objects that should be managed | ||
89 | and closed by the calling code, while <i>properties</i> only return a reference to a prexisting handle | ||
90 | object.</p> | ||
91 | |||
92 | <p><br/></p> | ||
93 | <p><b>See also:</b></p> | ||
94 | <ul> | ||
95 | <li><a href="powerdiff.htm">MSI Diff Sample Tool</a></li> | ||
96 | <li><a href="DTFAPI.chm::/html/T_Microsoft_Deployment_WindowsInstaller_Database.htm">Database Class</a></li> | ||
97 | </ul> | ||
98 | <p><br/></p> | ||
99 | |||
100 | </div> | ||
101 | |||
102 | <div id="footer"> | ||
103 | <p /> | ||
104 | Send comments on this topic to <a id="HT_MailLink" href="mailto:wix-users%40lists.sourceforge.net?Subject=Deployment Tools Foundation Documentation"> | ||
105 | wix-users@lists.sourceforge.net</a> | ||
106 | |||
107 | <script type="text/javascript"> | ||
108 | var HT_mailLink = document.getElementById("HT_MailLink"); | ||
109 | var HT_mailLinkText = HT_mailLink.innerHTML; | ||
110 | HT_mailLink.href += ": " + document.title; | ||
111 | HT_mailLink.innerHTML = HT_mailLinkText; | ||
112 | </script> | ||
113 | |||
114 | <p /> | ||
115 | |||
116 | </div> | ||
117 | </div> | ||
118 | |||
119 | </body> | ||
120 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/debuggingcas.htm b/src/samples/Dtf/Documents/Guide/Content/debuggingcas.htm deleted file mode 100644 index ca1be161..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/debuggingcas.htm +++ /dev/null | |||
@@ -1,66 +0,0 @@ | |||
1 | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
2 | <head> | ||
3 | <title>Debugging Managed Custom Actions</title> | ||
4 | <link rel="stylesheet" type="text/css" href="../styles/presentation.css" /> | ||
5 | <link rel="stylesheet" type="text/css" href="ms-help://Hx/HxRuntime/HxLink.css" /> | ||
6 | </head> | ||
7 | |||
8 | <body> | ||
9 | |||
10 | <div id="control"> | ||
11 | <span class="productTitle">Deployment Tools Foundation</span><br /> | ||
12 | <span class="topicTitle">Debugging Managed Custom Actions</span><br /> | ||
13 | <div id="toolbar"> | ||
14 | <span id="chickenFeet"> | ||
15 | <a href="using.htm">Development Guide</a> > | ||
16 | <a href="managedcas.htm">Managed CAs</a> > | ||
17 | <span class="nolink">Debugging</span> | ||
18 | </span> | ||
19 | </div> | ||
20 | </div> | ||
21 | <div id="main"> | ||
22 | <div id="header"> | ||
23 | </div> | ||
24 | <div class="summary"> | ||
25 | <p>There are two ways to attach a debugger to a managed custom action.</p> | ||
26 | <p><b>Attach to message-box:</b> Add some temporary code to your custom action to display a | ||
27 | message box. Then when the message box pops up at install time, you can attch your | ||
28 | debugger to that process (usually identifiable by the title of the message box). | ||
29 | Once attached, you can ensure that symbols are loaded if necessary (they will be automatically | ||
30 | loaded if PDB files were embedded in the CA assembly at build time), then set breakpoints | ||
31 | anywhere in the custom action code.</p> | ||
32 | <p><b>MMsiBreak environment variable:</b> When debugging <i>managed</i> custom actions, | ||
33 | you should use the MMsiBreak environment variable instead of MsiBreak. Set the MMsiBreak | ||
34 | variable to the custom action entrypoint name. (Remember this might be different from | ||
35 | the method name if it was overridden by the CustomActionAttribute.) When the CA proxy | ||
36 | finds a matching name, the CLR JIT-debugging dialog | ||
37 | will appear with text similar to "An exception 'Launch for user' has occurred | ||
38 | in <i>YourCustomActionName</i>." The debug break occurs after the custom | ||
39 | action assembly has been loaded, but just before custom action method is invoked. | ||
40 | Once attached, you can ensure that symbols are loaded if necessary, | ||
41 | then set breakpoints anywhere in the custom action code. Note: the MMsiBreak | ||
42 | environment variable can also accept a comma-separated list of action names, any of | ||
43 | which will cause a break when hit.</p> | ||
44 | <p><br/></p> | ||
45 | |||
46 | </div> | ||
47 | |||
48 | <div id="footer"> | ||
49 | <p /> | ||
50 | Send comments on this topic to <a id="HT_MailLink" href="mailto:wix-users%40lists.sourceforge.net?Subject=Deployment Tools Foundation Documentation"> | ||
51 | wix-users@lists.sourceforge.net</a> | ||
52 | |||
53 | <script type="text/javascript"> | ||
54 | var HT_mailLink = document.getElementById("HT_MailLink"); | ||
55 | var HT_mailLinkText = HT_mailLink.innerHTML; | ||
56 | HT_mailLink.href += ": " + document.title; | ||
57 | HT_mailLink.innerHTML = HT_mailLinkText; | ||
58 | </script> | ||
59 | |||
60 | <p /> | ||
61 | |||
62 | </div> | ||
63 | </div> | ||
64 | |||
65 | </body> | ||
66 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/dependencies.htm b/src/samples/Dtf/Documents/Guide/Content/dependencies.htm deleted file mode 100644 index cfec5880..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/dependencies.htm +++ /dev/null | |||
@@ -1,88 +0,0 @@ | |||
1 | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
2 | <head> | ||
3 | <title>Dependencies</title> | ||
4 | <link rel="stylesheet" type="text/css" href="../styles/presentation.css" /> | ||
5 | <link rel="stylesheet" type="text/css" href="ms-help://Hx/HxRuntime/HxLink.css" /> | ||
6 | </head> | ||
7 | |||
8 | <body> | ||
9 | |||
10 | <div id="control"> | ||
11 | <span class="productTitle">Deployment Tools Foundation</span><br /> | ||
12 | <span class="topicTitle">Dependencies</span><br /> | ||
13 | <div id="toolbar"> | ||
14 | <span id="chickenFeet"> | ||
15 | <a href="about.htm">Overview</a> > | ||
16 | <span class="nolink">Dependencies</span> | ||
17 | </span> | ||
18 | </div> | ||
19 | </div> | ||
20 | <div id="main"> | ||
21 | <div id="header"> | ||
22 | </div> | ||
23 | <div class="summary"> | ||
24 | |||
25 | <p>This page lists all the components that the DTF project depends on, at build time and at run-time.</p> | ||
26 | |||
27 | <h3>Build-time Dependencies</h3> | ||
28 | <ul> | ||
29 | <li><p><b>Visual Studio / .NET Framework</b> - Most of DTF can be built with Visual Studio 2005 & | ||
30 | .NET Framework 2.0. However, the LINQ project requires VS 2008 & .NET Framework 3.5.</p></li> | ||
31 | |||
32 | <li><p><b>Sandcastle</b> - .NET documentation build engine from Microsoft, used to process all the XML doc-comments | ||
33 | in DTF libraries into DTFAPI.chm. | ||
34 | <a href="http://www.codeplex.com/Sandcastle/" target="_blank">(official site)</a></p></li> | ||
35 | |||
36 | <li><p><b>Sandcastle Builder</b> - Sandcastle by itself is complex and difficult to use; this free tool | ||
37 | from Codeplex provides an easy-to-use project system around it to automate the documentation build process. | ||
38 | <a href="http://www.codeplex.com/SHFB/" target="_blank">(project link)</a></p></li> | ||
39 | |||
40 | <li><p><b>HTML Help Workshop</b> - Tools for building HTML Help 1.x (CHM files). Used to build DTF.chm. | ||
41 | <a href="http://msdn2.microsoft.com/en-us/library/ms669985.aspx" target="_blank">(download link)</a></p></li> | ||
42 | </ul> | ||
43 | |||
44 | <h3>Run-time Dependencies</h3> | ||
45 | <ul> | ||
46 | <li><p><b>.NET Framework</b> - Most of DTF requires .NET Framework 2.0. (.NET 1.1 is no longer supported.) | ||
47 | The only exception is the LINQ assembly which requires .NET Framework 3.5.</p></li> | ||
48 | |||
49 | <li><p><b>Windows Installer</b> - Windows Installer introduced new APIs and capabilities with each successive | ||
50 | version. Obviously, the corresponding functionality in the managed APIs is only available when the required | ||
51 | version of the Windows Instaler (msi.dll) is installed on the system. Use the Installer.Version property | ||
52 | to easily check the currently installed MSI version. Attempting to use an API not supported by the current | ||
53 | version will result in an EntryPointNotFoundException. To check what version is required for a particular API, | ||
54 | see the documentation link to the corresponding unmanaged API in MSI.chm.</p> | ||
55 | <p>In some instances when a newer version of MSI provides an "Ex" alternative to a function, only the "Ex" | ||
56 | function is used by the managed library. This may hide some functionality that would have otherwise been | ||
57 | available on a system with an older version of MSI.</p></li> | ||
58 | |||
59 | <li><p><b>cabinet.dll</b> - The DTF cabinet compression library uses cabinet.dll to implement the | ||
60 | low-level cabinet compression and decompression. This DLL is part of all versions of Windows, | ||
61 | located in the system directory.</p></li> | ||
62 | |||
63 | <li><p><b>System.IO.Compression.DeflateStream</b> - The DTF zip compression library uses this class | ||
64 | to implement the low-level zip compression and decompression. This class is part of .NET Framework | ||
65 | 2.0 and later.</p></li> | ||
66 | </ul> | ||
67 | |||
68 | </div> | ||
69 | |||
70 | <div id="footer"> | ||
71 | <p /> | ||
72 | Send comments on this topic to <a id="HT_MailLink" href="mailto:wix-users%40lists.sourceforge.net?Subject=Deployment Tools Foundation Documentation"> | ||
73 | wix-users@lists.sourceforge.net</a> | ||
74 | |||
75 | <script type="text/javascript"> | ||
76 | var HT_mailLink = document.getElementById("HT_MailLink"); | ||
77 | var HT_mailLinkText = HT_mailLink.innerHTML; | ||
78 | HT_mailLink.href += ": " + document.title; | ||
79 | HT_mailLink.innerHTML = HT_mailLinkText; | ||
80 | </script> | ||
81 | |||
82 | <p /> | ||
83 | |||
84 | </div> | ||
85 | </div> | ||
86 | |||
87 | </body> | ||
88 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/filepatchwrapper.htm b/src/samples/Dtf/Documents/Guide/Content/filepatchwrapper.htm deleted file mode 100644 index 6bab69b5..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/filepatchwrapper.htm +++ /dev/null | |||
@@ -1,34 +0,0 @@ | |||
1 | <!doctype HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > | ||
2 | <html> | ||
3 | <head> | ||
4 | <title>Managed Wrapper for Binary File Patch APIs</title> | ||
5 | <meta http-equiv="Content-Type" content="text/html; charset=Windows-1252"> | ||
6 | <link rel="stylesheet" type="text/css" href="MSDN.css"> | ||
7 | </head> | ||
8 | <body id="bodyID" class="dtBODY"> | ||
9 | <div id="nsbanner"> | ||
10 | <div id="bannerrow1"> | ||
11 | <table class="bannerparthead" cellspacing="0" id="Table1"> | ||
12 | <tr id="hdr"> | ||
13 | <td class="runninghead">Managed Libraries for Windows Installer</td> | ||
14 | <td class="product"></td> | ||
15 | </tr> | ||
16 | </table> | ||
17 | </div> | ||
18 | <div id="TitleRow"> | ||
19 | <h1 class="dtH1">Managed Wrapper for Binary File Patch APIs</h1> | ||
20 | </div> | ||
21 | </div> | ||
22 | <div id="nstext"> | ||
23 | <p>The binary file patch creation and application APIs (supplied by MsPatchC.dll and | ||
24 | MsPatchA.dll) are wrapped in the Microsoft.WindowsInstaller.FilePatch.dll assembly.</p> | ||
25 | |||
26 | <p><br/></p> | ||
27 | <p><b>See also:</b></p> | ||
28 | <ul> | ||
29 | <li><a href="ms-its:MMLRef.chm::/Microsoft.WindowsInstaller.FilePatch.html">FilePatch Class</a></li> | ||
30 | </ul> | ||
31 | <p><br/></p> | ||
32 | </div> | ||
33 | </body> | ||
34 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/history.htm b/src/samples/Dtf/Documents/Guide/Content/history.htm deleted file mode 100644 index 704ce875..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/history.htm +++ /dev/null | |||
@@ -1,437 +0,0 @@ | |||
1 | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
2 | <head> | ||
3 | <title>Change History</title> | ||
4 | <link rel="stylesheet" type="text/css" href="../styles/presentation.css" /> | ||
5 | <link rel="stylesheet" type="text/css" href="ms-help://Hx/HxRuntime/HxLink.css" /> | ||
6 | </head> | ||
7 | |||
8 | <body> | ||
9 | |||
10 | <div id="control"> | ||
11 | <span class="productTitle">Deployment Tools Foundation</span><br /> | ||
12 | <span class="topicTitle">Change History</span><br /> | ||
13 | <div id="toolbar"> | ||
14 | <span id="chickenFeet"> | ||
15 | <a href="about.htm">Overview</a> > | ||
16 | <span class="nolink">Change History</span> | ||
17 | </span> | ||
18 | </div> | ||
19 | </div> | ||
20 | <div id="main"> | ||
21 | <div id="header"> | ||
22 | </div> | ||
23 | <div class="summary"> | ||
24 | |||
25 | <h3><b>2007-07-03</b></h3> | ||
26 | <i>See <a href="whatsnew.htm">What's New?</a></i><br /> <br /> <br /> | ||
27 | <hr size="2"/> | ||
28 | <h3><b>2005-03-30</b></h3> | ||
29 | |||
30 | <ul> | ||
31 | <li>New custom action proxy<ul> | ||
32 | <li><b>Managed custom actions use an XML config file to specify the CLR version.</b></li> | ||
33 | <li>New CAPack module is an unmanaged self-extracting CA DLL that can wrap both | ||
34 | managed and unmanaged custom actions. (The old managed CAProxy module is obsolete.)</li> | ||
35 | <li>Custom action build process is different but still complicated -- | ||
36 | see documentation for details.</li> | ||
37 | <li>CustomActionAttribute no longer accepts the optional NativeDependencies | ||
38 | parameter since it does not apply to the new proxy (all packaged files | ||
39 | are always extracted and available when the CA executes). </li> | ||
40 | </ul></li> | ||
41 | |||
42 | <li>64bit support<ul> | ||
43 | <li>Various code fixes to pointer/handle types and structure alignments.</li> | ||
44 | <li>Cabinet and MSI libraries tested on AMD64 CLR.</li> | ||
45 | <li>Unmanaged and managed parts of custom action proxy tested on AMD64.</li> | ||
46 | </ul></li> | ||
47 | |||
48 | <li>MSI 3.1 APIs added:<ul> | ||
49 | <li>Installer.SetExternalUI(ExternalUIRecordHandler)</li> | ||
50 | <li>Installer.NotifySidChange</li> | ||
51 | </ul></li> | ||
52 | |||
53 | <li>Code builds easier with .NET Famework 2.0<ul> | ||
54 | <li>AugmentIL post-build step is no longer necessary when compiling the cabinet code | ||
55 | against .NET Framework 2.0, which has builtin support for cdecl delegates.</li> | ||
56 | <li>All C# code compiles against .NET Framework 2.0 without obsolete warnings, | ||
57 | when setting the NETFX2 preprocessor define.</li> | ||
58 | <li>Same code is still compatible with .NET Framework 1.0 + AugmentIL.</li> | ||
59 | </ul></li> | ||
60 | |||
61 | <li>Miscellaneous bugfixes/changes:<ul> | ||
62 | <li>InstallPackage.ExtractFiles could fail in some cominations of | ||
63 | compressed/uncompressed files - fixed.</li> | ||
64 | <li>Installer.DeterminePatchSequence was broken due to an incorrect interop struct - fixed.</li> | ||
65 | <li>CabinetInfo and CabinetFileInfo classes made serializable.</li> | ||
66 | <li>Added Session.FormatString method to simplify formatting a string with | ||
67 | property substitutions.</li> | ||
68 | </ul></li> | ||
69 | <li>Documentation updates:<ul> | ||
70 | <li>Updated all documentation for new CA proxy.</li> | ||
71 | <li>Added new topic discussing InstallUtil.</li> | ||
72 | </ul></li> | ||
73 | </ul> | ||
74 | |||
75 | <hr size="2"/> | ||
76 | <h3><b>2004-04-13</b></h3> | ||
77 | |||
78 | <ul> | ||
79 | <li>Documentation<ul> | ||
80 | <li>Consolidated all documentation into a single CHM file.</li> | ||
81 | <li>Added new topics about working with MSI databases & cabinet files, | ||
82 | to help new users get oriented more easily.</li> | ||
83 | </ul></li> | ||
84 | |||
85 | <li>WindowsInstaller<ul> | ||
86 | <li>Removed [Beta] tags from MSI 3.0 APIs, but otherwise there | ||
87 | have been no changes since 3.0 Beta 1.<ul> | ||
88 | <li>Be warned these are still the least-tested parts of | ||
89 | the library, so early users may encounter bugs.</li> | ||
90 | </ul></li> | ||
91 | </ul></li> | ||
92 | |||
93 | <li>InstallPackage<ul> | ||
94 | <li>Fixed InstallPackage.ExtractFiles() bug when directory doesn't exist.</li> | ||
95 | <li>Added ability to handle uncompressed files in a package marked as compressed.</li> | ||
96 | </ul></li> | ||
97 | |||
98 | <li>Cabinet<ul> | ||
99 | <li>Fixed improper handling of file attributes.<ul> | ||
100 | <li>This bug caused some packages to not be extractable by other tools.</li> | ||
101 | </ul></li> | ||
102 | <li>Added support for UTF filenames.<ul> | ||
103 | <li>Non-ASCII filenames will automatically be stored as UTF-8. | ||
104 | (But note most other tools don't know how to extract them.)</li> | ||
105 | </ul></li> | ||
106 | </ul></li> | ||
107 | </ul> | ||
108 | |||
109 | <hr size="2"/> | ||
110 | <h3><b>2003-10-13</b></h3> | ||
111 | |||
112 | <ul> | ||
113 | <li>Cab<ul> | ||
114 | <li>Fixed a bug introduced in v2.4.0 that caused files to be left in the %TEMP% | ||
115 | directory after creating a cab.</li> | ||
116 | <li>Unsealed the CabinetInfo, CabinetFileInfo, CabinetStatus classes and made a few methods | ||
117 | protected and virtual.</li> | ||
118 | </ul></li> | ||
119 | |||
120 | <li>AugmentIL<ul> | ||
121 | <li>Fixed a bug that sometimes caused a crash when specifying a relative output path | ||
122 | on the command-line.</li> | ||
123 | <li>Fixed a bug that sometimes caused the Win32 version to be missing from the output file.</li> | ||
124 | </ul></li> | ||
125 | |||
126 | <li>Samples\Diff: added new sample tool<ul> | ||
127 | <li>Recursively diffs directories, MSIs, MSPs, CABs, other files.</li> | ||
128 | </ul></li> | ||
129 | </ul> | ||
130 | |||
131 | <hr size="2"/> | ||
132 | <h3><b>2003-09-23</b></h3> | ||
133 | |||
134 | <ul> | ||
135 | <li>Cab<ul> | ||
136 | <li>Fixed a bug that caused compressing very large files/file sets to use way too | ||
137 | much memory. Performance on large inputs is now within a few % of native cab tools | ||
138 | (sometimes even a little faster!) for the same compression level.</li> | ||
139 | </ul></li> | ||
140 | |||
141 | <li>WindowsInstaller<ul> | ||
142 | <li>All the new MSI 3.0 beta APIs are wrapped, resulting in the following additions:<ul> | ||
143 | <li>New classes - Product, Patch (for accessing sourcelist and other config)</li> | ||
144 | <li>New methods on Install class - GetProducts, GetPatches, RemovePatches, | ||
145 | ApplyMultiplePatches, DetermineApplicablePatches, ExtractPatchXmlData</li> | ||
146 | <li>New enumerations - InstallContext, PatchStates, SourceType</li> | ||
147 | <li>Additional InstallProperty values</li> | ||
148 | </ul></li> | ||
149 | <li>Note, MSI 3.0 support should be considered preliminary for now, | ||
150 | as APIs (both native and managed) are subject to change.</li> | ||
151 | <li>For MSI 2.0 compatibility, developers should not use any classes or | ||
152 | methods that are marked as [MSI 3.0 beta] in the documentation.</li> | ||
153 | <li>And unrelated to 3.0, a few additional enums have been added: | ||
154 | DialogAttributes, ControlAttributes, CustomActionTypes, | ||
155 | IniFileAction, RegistryRoot, RemoveFileInstallMode, | ||
156 | ServiceControlEvents, ServiceInstallFlags, TextStyles, | ||
157 | UpgradeAttributes, LocatorType</li> | ||
158 | <li>Also made a few minor non-breaking changes to keep the library FxCop-clean.</li> | ||
159 | </ul></li> | ||
160 | |||
161 | <li>AugmentIL<ul> | ||
162 | <li>Added support for strongname signing and delay-signing. AugmentIL tries to | ||
163 | locate the keyfile using the AssemblyKeyFileAttribute, or you may specify the | ||
164 | path with the new /key option.</li> | ||
165 | <li>All "released" assemblies will now be strongname-signed | ||
166 | (with an unofficial key).</li> | ||
167 | </ul></li> | ||
168 | |||
169 | <li>CAProxy<ul> | ||
170 | <li>Added support for NativeDependencies property on CustomActionAttribute. This enables | ||
171 | custom actions to P/Invoke into native DLLs that are carried with them.</li> | ||
172 | </ul></li> | ||
173 | |||
174 | <li>Samples\SampleCAs<ul> | ||
175 | <li>In SampleCA2, changed MessageBox.Show("") to session.Message(User,""), | ||
176 | because generally it is a bad practice for CAs to show independent UI.</li> | ||
177 | <li>Added test of CustomActionAttribute.NativeDependencies functionality.</li> | ||
178 | </ul></li> | ||
179 | |||
180 | <li>Samples\CabPack: added new sample<ul> | ||
181 | <li>Demonstrates & tests the cab library by creating self-extracting packages</li> | ||
182 | </ul></li> | ||
183 | |||
184 | <li>Samples\Inventory: added new sample<ul> | ||
185 | <li>Shows a hierarchical, relational, searchable view of all of the product, | ||
186 | feature, component, file, and patch data managed by MSI, for all products | ||
187 | installed on the system.</li> | ||
188 | </ul></li> | ||
189 | </ul> | ||
190 | |||
191 | <hr size="2"/> | ||
192 | <h3><b>2003-09-12</b></h3> | ||
193 | |||
194 | <ul> | ||
195 | <li>Cab:<ul> | ||
196 | <li>Added CabinetInfo.CompressDirectory method, capable of compressing an | ||
197 | entire directory tree structure.</li> | ||
198 | <li>Updated documentation of various methods concerning support of directory | ||
199 | structure inside cabs.</li> | ||
200 | <li>CabinetInfo case-sensitivity was inconsistent - | ||
201 | now it is case-insensitive by default, though case is still preserved</li> | ||
202 | <li>Separated assembly attributes into assembly.cs</li> | ||
203 | </ul></li> | ||
204 | <li>Msi:<ul> | ||
205 | <li>InstallerException and subclasses automatically get extended error data | ||
206 | from MSI's last-error-record when available. The data is stored | ||
207 | in the exception and made available through the GetErrorRecord() | ||
208 | method, and the exception's Message includes the formatted error | ||
209 | message and data. This makes most exceptions extremely informative!</li> | ||
210 | <li>Added View.GetValidationErrors() method, and supporting ValidationErrorInfo | ||
211 | struct and ValidationError enum. This wrapper for the MsiViewGetError | ||
212 | API had been accidentally left out.</li> | ||
213 | <li>Session.Message() now supports message-box flags to specify buttons & icon</li> | ||
214 | <li>Added doc remarks to various methods about closing handles.</li> | ||
215 | <li>Separated assembly attributes into assembly.cs</li> | ||
216 | </ul></li> | ||
217 | <li>AugmentIL:<ul> | ||
218 | <li>Recent builds of ildasm v2.0.* have a slightly different output format, | ||
219 | which could break AugmentIL in some cases - fixed</li> | ||
220 | </ul></li> | ||
221 | <li>SampleCAs:<ul> | ||
222 | <li>Removed 'using' clause from SampleCA1 -- there's no need to close the session's active database handle</li> | ||
223 | </ul></li> | ||
224 | <li>Documentation:<ul> | ||
225 | <li>Added note to ReadMe about compiling the cab source into another assembly</li> | ||
226 | </ul></li> | ||
227 | </ul> | ||
228 | |||
229 | <hr size="2"/> | ||
230 | <h3><b>2003-08-07</b></h3> | ||
231 | |||
232 | <ul> | ||
233 | <li>Cab:<ul> | ||
234 | <li>CabinetInfo.IsValid() usually returned false even for valid cabs - fixed</li> | ||
235 | <li>Extracting cab files with null timestamps generated exception - fixed</li> | ||
236 | </ul></li> | ||
237 | <li>Msi:<ul> | ||
238 | <li>Added InstallCanceledException, subclass of InstallerException; | ||
239 | Methods which may be canceled by the user can throw this exception</li> | ||
240 | <li>Added MessageResult enumeration; | ||
241 | Used by Session.Message() and ExternalUIHandler delegate</li> | ||
242 | <li>Installer.EnableLog() now supports extended attributes correctly: | ||
243 | Append mode and flush-every-line</li> | ||
244 | <li>Added Session.DoActionSequence() - | ||
245 | This wrapper for the MsiSequence API had been accidentally left out</li> | ||
246 | </ul></li> | ||
247 | <li>CAProxy:<ul> | ||
248 | <li>Catches InstallCanceledException, returns ERROR_INSTALL_USEREXIT | ||
249 | so CA developer doesn't necessarily have to handle the exception</li> | ||
250 | </ul></li> | ||
251 | <li>Msi\Package:<ul> | ||
252 | <li>Added TransformInfo class: metadata about an individual patch transform</li> | ||
253 | <li>Added PatchPackage.GetTransform*() methods which return TransformInfo</li> | ||
254 | </ul></li> | ||
255 | <li>Documentation:<ul> | ||
256 | <li>Added section to ReadMe.htm about building managed custom actions</li> | ||
257 | </ul></li> | ||
258 | </ul> | ||
259 | |||
260 | <hr size="2"/> | ||
261 | <h3><b>2003-06-02</b></h3> | ||
262 | |||
263 | <ul> | ||
264 | <li>Msi:<ul> | ||
265 | <li>Validation didn't work on merge modules - fixed</li> | ||
266 | </ul></li> | ||
267 | <li>CAProxy:<ul> | ||
268 | <li>Was broken in 2.1 - fixed</li> | ||
269 | </ul></li> | ||
270 | </ul> | ||
271 | |||
272 | <hr size="2"/> | ||
273 | <h3><b>2003-05-14</b></h3> | ||
274 | |||
275 | <ul> | ||
276 | <li>Msi:<ul> | ||
277 | <li>External UI handler didn't survive a garbage collection - fixed</li> | ||
278 | <li>Validation engine was completely broken - now it should work | ||
279 | at least for MSIs which are already mostly valid</li> | ||
280 | <li>Added DynamicLoad property to CustomActionAttribute<br /> | ||
281 | Usage: set DynamicLoad=false when using XmlSerialization; default is true</li> | ||
282 | </ul></li> | ||
283 | <li>Msi\Package:<ul> | ||
284 | <li>File extraction and update methods didn't work on merge modules - fixed</li> | ||
285 | <li>Made file update code slightly more robust</li> | ||
286 | <li>Removed hard-reference to the FilePatch assembly - now it is only | ||
287 | loaded if working with binary file patches</li> | ||
288 | </ul></li> | ||
289 | <li>AugmentIL:<ul> | ||
290 | <li>AugmentIL would crash if some input files had read-only attr - fixed</li> | ||
291 | <li>Made /verbose switch slightly more verbose</li> | ||
292 | </ul></li> | ||
293 | <li>CAProxy:<ul> | ||
294 | <li>Added support for the DynamicLoad property of CustomActionAttribute</li> | ||
295 | <li>Added MMsiBreak debugging functionality - see doc</li> | ||
296 | </ul></li> | ||
297 | <li>Samples\WiFile:<ul> | ||
298 | <li>Added /l (list files) switch</li> | ||
299 | </ul></li> | ||
300 | <li>Samples\SampleCAs:<ul> | ||
301 | <li>In the makefile the comments about debug builds had an error; | ||
302 | Now the sample builds debug packages (correctly) by default.</li> | ||
303 | </ul></li> | ||
304 | <li>Documentation:<ul> | ||
305 | <li>Wrote AugmentIL.htm describing the AugmentIL tool and its options.</li> | ||
306 | <li>Wrote WiFile.htm describing the WiFile sample tool.</li> | ||
307 | <li>Added section to ReadMe.htm about debugging managed custom actions.</li> | ||
308 | </ul></li> | ||
309 | </ul> | ||
310 | |||
311 | <hr size="2"/> | ||
312 | <h3><b>2003-03-31</b></h3> | ||
313 | |||
314 | <ul> | ||
315 | <li>Msi: Implemented the remaining APIs, also minor improvements and bugfixes<ul> | ||
316 | <li>All published APIs are wrapped, with the exception of four: | ||
317 | MsiGetFileSignatureInformation (because I don't know of a .NET analog | ||
318 | for the returned certificate structure), and 3 APIs for previewing UI</li> | ||
319 | <li>Database.OpenView and Database.Execute* now take String.Format style params</li> | ||
320 | <li>Database.ApplyTransform can optionally use the error-suppression flags | ||
321 | stored in the transform summary info</li> | ||
322 | <li>Added a few supporting enumerations and structures for the remaining APIs</li> | ||
323 | <li>InstallerException gets a descriptive message for any MSI or system error</li> | ||
324 | <li>Fixed a bug in InstallerException which would usually report "error 0"</li> | ||
325 | <li>Added optimization for setting a Record field to a MemoryStream</li> | ||
326 | <li>Record.GetStream is capable of extracting substorages</li> | ||
327 | <li>Moved InstallPath class to Microsoft.WindowsInstaller.Package assembly</li> | ||
328 | </ul></li> | ||
329 | <li>Msi\FilePatch: added new project<ul> | ||
330 | <li>Binary file patch API wrapper</li> | ||
331 | </ul></li> | ||
332 | <li>Msi\Package: added new project<ul> | ||
333 | <li>Helper classes for working with MSI and MSP packages</li> | ||
334 | </ul></li> | ||
335 | <li>Cab: some minor bugfixes<ul> | ||
336 | <li>Cabinet.Extract(stream, name) threw a NullReferenceException if the file | ||
337 | didn't exist in the cab -- now it returns null</li> | ||
338 | <li>CabinetInfo.CompressFileSet() was broken -- fixed</li> | ||
339 | <li>If a Cabinet callback throws an exception, it is propogated as the | ||
340 | inner-exception of the CabinetException</li> | ||
341 | </ul></li> | ||
342 | <li>Samples\WiFile: added new sample<ul> | ||
343 | <li>Demonstrates some features of InstallPackage class in Msi\Package project</li> | ||
344 | </ul></li> | ||
345 | </ul> | ||
346 | |||
347 | <hr size="2"/> | ||
348 | <h3><b>2003-03-20</b></h3> | ||
349 | |||
350 | Documentation!<ul> | ||
351 | <li>Msi and Cab sources include complete C# XML documentation.</li> | ||
352 | <li>Msi and Cab makefiles generate XML documentation files.</li> | ||
353 | <li>Reference CHM compiled from XML documentation with NDoc.</li> | ||
354 | </ul> | ||
355 | |||
356 | <p>I am aware that exceptions are still not documented in most areas. | ||
357 | Other than that, feel free to send me a note if it's still not clear | ||
358 | how to use parts of the API after reading the documentation.</p> | ||
359 | |||
360 | <p>Version is still 1.1 because there are no code changes in this release.</p> | ||
361 | |||
362 | <hr size="2"/> | ||
363 | <h3><b>2003-03-13</b></h3> | ||
364 | |||
365 | <ul> | ||
366 | <li>Msi: lots of small improvements for usability and consistency<ul> | ||
367 | <li>Reworked ExternalUIHandler support</li> | ||
368 | <li>Added Installer properties/methods:<ul> | ||
369 | <li>Components</li> | ||
370 | <li>ComponentClients()</li> | ||
371 | <li>ComponentState()</li> | ||
372 | <li>ComponentPath()</li> | ||
373 | <li>EnableLog()</li> | ||
374 | </ul></li> | ||
375 | <li>Added Session.EvaluateCondition() method</li> | ||
376 | <li>Improved exception-handling in many methods in Installer, Database, | ||
377 | & Session classes</li> | ||
378 | <li>Added extensive XML doc-comments to Installer, Database, View, | ||
379 | & Session classes</li> | ||
380 | <li>A few breaking changes:<ul> | ||
381 | <li>View.ModifyMode enumeration moved outside View and | ||
382 | renamed ViewModifyMode</li> | ||
383 | <li>InstallLogMode enumeration renamed to InstallLogModes | ||
384 | (naming convention for bitfields)</li> | ||
385 | <li>Record constructor takes arbitrary number of parameters</li> | ||
386 | </ul></li> | ||
387 | </ul></li> | ||
388 | <li>AugmentIL: almost completely rewritten<ul> | ||
389 | <li>Ildasm/ilasm steps are built-in<ul> | ||
390 | <li>The round-trip can be done in one step</li> | ||
391 | <li>IL source input/output is still supported</li> | ||
392 | </ul></li> | ||
393 | <li>Never throws an unhandled exception</li> | ||
394 | <li>Organized command-line options, consistent with other .NET tools</li> | ||
395 | <li>Uses a plugin architecture to allow additional augmentations</li> | ||
396 | </ul></li> | ||
397 | <li>CAProxy: Added AIL_CAProxy.cs - AugmentIL plugin generates CA proxy methods</li> | ||
398 | |||
399 | <li>SampleCAs: Updated makefile for new AugmentIL usage</li> | ||
400 | </ul> | ||
401 | |||
402 | <hr size="2"/> | ||
403 | <h3><b>2003-01-16</b></h3> | ||
404 | |||
405 | <ul> | ||
406 | <li>ReadMe.htm: Added section on writing managed CAs</li> | ||
407 | <li>SampleCAs: Added missing reference to System.Windows.Forms.dll to the makefile</li> | ||
408 | <li>AugmentIL: Added specific warning messages for when CA method has wrong signature</li> | ||
409 | <li>Put sources in Toolbox-hosted Source Depot.</li> | ||
410 | </ul> | ||
411 | |||
412 | <hr size="2"/> | ||
413 | <h3><b>2003-01-14</b></h3> | ||
414 | Initial posting to http://toolbox | ||
415 | |||
416 | <p> </p> | ||
417 | </div> | ||
418 | |||
419 | <div id="footer"> | ||
420 | <p /> | ||
421 | Send comments on this topic to <a id="HT_MailLink" href="mailto:wix-users%40lists.sourceforge.net?Subject=Deployment Tools Foundation Documentation"> | ||
422 | wix-users@lists.sourceforge.net</a> | ||
423 | |||
424 | <script type="text/javascript"> | ||
425 | var HT_mailLink = document.getElementById("HT_MailLink"); | ||
426 | var HT_mailLinkText = HT_mailLink.innerHTML; | ||
427 | HT_mailLink.href += ": " + document.title; | ||
428 | HT_mailLink.innerHTML = HT_mailLinkText; | ||
429 | </script> | ||
430 | |||
431 | <p /> | ||
432 | |||
433 | </div> | ||
434 | </div> | ||
435 | |||
436 | </body> | ||
437 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/installutil.htm b/src/samples/Dtf/Documents/Guide/Content/installutil.htm deleted file mode 100644 index e235a7b6..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/installutil.htm +++ /dev/null | |||
@@ -1,94 +0,0 @@ | |||
1 | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
2 | <head> | ||
3 | <title>About InstallUtil</title> | ||
4 | <link rel="stylesheet" type="text/css" href="../styles/presentation.css" /> | ||
5 | <link rel="stylesheet" type="text/css" href="ms-help://Hx/HxRuntime/HxLink.css" /> | ||
6 | </head> | ||
7 | |||
8 | <body> | ||
9 | |||
10 | <div id="control"> | ||
11 | <span class="productTitle">Deployment Tools Foundation</span><br /> | ||
12 | <span class="topicTitle">About InstallUtil</span><br /> | ||
13 | <div id="toolbar"> | ||
14 | <span id="chickenFeet"> | ||
15 | <a href="using.htm">Development Guide</a> > | ||
16 | <a href="managedcas.htm">Managed CAs</a> > | ||
17 | <span class="nolink">InstallUtil</span> | ||
18 | </span> | ||
19 | </div> | ||
20 | </div> | ||
21 | <div id="main"> | ||
22 | <div id="header"> | ||
23 | </div> | ||
24 | <div class="summary"> | ||
25 | <p> | ||
26 | InstallUtil is often considered as another option for executing MSI custom actions | ||
27 | written in managed code. But in most cases it is not the best solution, for a number | ||
28 | of reasons.</p> | ||
29 | <p> | ||
30 | InstallUtil (in either InstallUtil.exe or InstallUtilLib.dll form) is a .NET Framework | ||
31 | tool for executing the System.Configuration.Installer classes that are implemented | ||
32 | in an assembly. That way the assembly can contain any special code required to install | ||
33 | itself and uninstall itself. Essentially it is the .NET replacement for COM self-registration | ||
34 | aka DllRegisterServer.</p> | ||
35 | <p> | ||
36 | Self-reg or System.Configuration.Installer is convenient for development use in | ||
37 | order to test code without creating an actual setup package, or for an IDE which | ||
38 | wants to generate self-installing code. But experienced setup developers and the | ||
39 | <a href="MSI.chm::/setup/selfreg_table.htm">Windows Installer documentation</a> | ||
40 | all agree that self-reg is a bad practice for a | ||
41 | production-quality setup. The current theory of state-of-the-art setup is that it | ||
42 | should be as data-driven as possible. That is, the setup package describes as fully | ||
43 | as possible the desired state of the system, and then the installer engine calculates | ||
44 | the necessary actions to install, uninstall, patch, etc.</p> | ||
45 | <p> | ||
46 | S.C.I encourages developers to write code for things such as registering services | ||
47 | or registering COM classes or other things which are more appropriately done using | ||
48 | built-in MSI functionality (the ServiceInstall and Registry tables). The Visual | ||
49 | Studio .NET wizards also tend to generate this kind of install code. Again, that | ||
50 | is nice for development but not good for real installations. You end up with similar | ||
51 | but slightly different code in many places for doing the same thing. And that code | ||
52 | is a black-box to the installer engine.</p> | ||
53 | <p> | ||
54 | An ideal MSI custom action is a logical extension of the setup engine, meaning it | ||
55 | is data-driven and written in a very generic way to read from existing or custom | ||
56 | tables in the MSI database, following a very similar pattern to the built-in actions. | ||
57 | This makes the CA re-usable, and makes the installation more transparent. S.C.I | ||
58 | custom actions invoked by InstallUtil cannot be data-driven because they don't have | ||
59 | full access to the install session or database. They also cannot write to the install | ||
60 | session's regular MSI log, but instead use a separate log which is bad for supportability.</p> | ||
61 | <p> | ||
62 | InstallUtil also requires that the assembly be installed before the CA is able to | ||
63 | execute. This is a problem for CAs that need to execute during the UI phase, or | ||
64 | gather information before installation. For that purpose MSI allows custom action | ||
65 | binaries to be embedded as non-installed files, but InstallUtil cannot make use | ||
66 | of those.</p> | ||
67 | <p> | ||
68 | Custom actions developed with DTF have none of the limitations of InstallUtil, | ||
69 | giving a setup developer full capabilities to write well-designed custom actions, | ||
70 | only now in managed code. | ||
71 | </p> | ||
72 | |||
73 | <p> </p> | ||
74 | </div> | ||
75 | |||
76 | <div id="footer"> | ||
77 | <p /> | ||
78 | Send comments on this topic to <a id="HT_MailLink" href="mailto:wix-users%40lists.sourceforge.net?Subject=Deployment Tools Foundation Documentation"> | ||
79 | wix-users@lists.sourceforge.net</a> | ||
80 | |||
81 | <script type="text/javascript"> | ||
82 | var HT_mailLink = document.getElementById("HT_MailLink"); | ||
83 | var HT_mailLinkText = HT_mailLink.innerHTML; | ||
84 | HT_mailLink.href += ": " + document.title; | ||
85 | HT_mailLink.innerHTML = HT_mailLinkText; | ||
86 | </script> | ||
87 | |||
88 | <p /> | ||
89 | |||
90 | </div> | ||
91 | </div> | ||
92 | |||
93 | </body> | ||
94 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/inventory.htm b/src/samples/Dtf/Documents/Guide/Content/inventory.htm deleted file mode 100644 index 40a6ef74..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/inventory.htm +++ /dev/null | |||
@@ -1,78 +0,0 @@ | |||
1 | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
2 | <head> | ||
3 | <title>Windows Installer System Inventory Viewer</title> | ||
4 | <link rel="stylesheet" type="text/css" href="../styles/presentation.css" /> | ||
5 | <link rel="stylesheet" type="text/css" href="ms-help://Hx/HxRuntime/HxLink.css" /> | ||
6 | </head> | ||
7 | |||
8 | <body> | ||
9 | |||
10 | <div id="control"> | ||
11 | <span class="productTitle">Deployment Tools Foundation</span><br /> | ||
12 | <span class="topicTitle">Windows Installer System Inventory Viewer</span><br /> | ||
13 | <div id="toolbar"> | ||
14 | <span id="chickenFeet"> | ||
15 | <a href="using.htm">Development Guide</a> > | ||
16 | <a href="samples.htm">Samples</a> > | ||
17 | <span class="nolink">Inventory</span> | ||
18 | </span> | ||
19 | </div> | ||
20 | </div> | ||
21 | <div id="main"> | ||
22 | <div id="header"> | ||
23 | </div> | ||
24 | <div class="summary"> | ||
25 | <p>This application shows a hierarchical, relational, searchable | ||
26 | view of all of the product, feature, component, file, and patch | ||
27 | data managed by MSI, for all products installed on the system.</p> | ||
28 | <p><br/></p> | ||
29 | |||
30 | <h4>Navigation</h4> | ||
31 | <ol> | ||
32 | <li><p>The tree on the left is self-explanatory.</p></li> | ||
33 | <li><p>Click on a row-header (grey box on the left side of the | ||
34 | grid) to jump to a table with more details about the item referred | ||
35 | to by that row. For example, clicking on a row-header of a | ||
36 | table that lists components will take you to a table that lists | ||
37 | the files in that component. Not every table has this ability, | ||
38 | but the cursor will turn to a hand shape to indicate when this is | ||
39 | possible.</p></li> | ||
40 | <li><p>Also you can navigate back and forward through your history | ||
41 | using the buttons in the application or mouse buttons 4 and 5.</p></li> | ||
42 | </ol> | ||
43 | <p><br/></p> | ||
44 | |||
45 | <h4>Searching</h4> | ||
46 | <p>The search feature is not hard to find. By default, searches | ||
47 | are limited to the current table. However, if you choose to find | ||
48 | "In Subtree" by checking the box, the search will include | ||
49 | the current table as well as all tables under the current location in | ||
50 | the tree. While this can take a long time if there is a lot of | ||
51 | data under the current node, you can stop the search at any time with | ||
52 | the stop button. The search pauses when a match is found, but | ||
53 | clicking "Find" again will continue the same search from that | ||
54 | point (unless you uncheck the "Continue" checkbox or change | ||
55 | the search string).</p> | ||
56 | |||
57 | <p><br/></p> | ||
58 | </div> | ||
59 | |||
60 | <div id="footer"> | ||
61 | <p /> | ||
62 | Send comments on this topic to <a id="HT_MailLink" href="mailto:wix-users%40lists.sourceforge.net?Subject=Deployment Tools Foundation Documentation"> | ||
63 | wix-users@lists.sourceforge.net</a> | ||
64 | |||
65 | <script type="text/javascript"> | ||
66 | var HT_mailLink = document.getElementById("HT_MailLink"); | ||
67 | var HT_mailLinkText = HT_mailLink.innerHTML; | ||
68 | HT_mailLink.href += ": " + document.title; | ||
69 | HT_mailLink.innerHTML = HT_mailLinkText; | ||
70 | </script> | ||
71 | |||
72 | <p /> | ||
73 | |||
74 | </div> | ||
75 | </div> | ||
76 | |||
77 | </body> | ||
78 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/managedcas.htm b/src/samples/Dtf/Documents/Guide/Content/managedcas.htm deleted file mode 100644 index 9cce0432..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/managedcas.htm +++ /dev/null | |||
@@ -1,53 +0,0 @@ | |||
1 | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
2 | <head> | ||
3 | <title>Managed Custom Actions</title> | ||
4 | <link rel="stylesheet" type="text/css" href="../styles/presentation.css" /> | ||
5 | <link rel="stylesheet" type="text/css" href="ms-help://Hx/HxRuntime/HxLink.css" /> | ||
6 | </head> | ||
7 | |||
8 | <body> | ||
9 | |||
10 | <div id="control"> | ||
11 | <span class="productTitle">Deployment Tools Foundation</span><br /> | ||
12 | <span class="topicTitle">Managed Custom Actions</span><br /> | ||
13 | <div id="toolbar"> | ||
14 | <span id="chickenFeet"> | ||
15 | <a href="using.htm">Development Guide</a> > | ||
16 | <span class="nolink">Managed CAs</span> | ||
17 | </span> | ||
18 | </div> | ||
19 | </div> | ||
20 | <div id="main"> | ||
21 | <div id="header"> | ||
22 | </div> | ||
23 | <div class="summary"> | ||
24 | |||
25 | <ul> | ||
26 | <li><a href="writingcas.htm">Writing Managed Custom Actions</a></li> | ||
27 | <li><a href="caconfig.htm">Specifying the Runtime Version</a></li> | ||
28 | <li><a href="buildingcas.htm">Building Managed Custom Actions</a></li> | ||
29 | <li><a href="debuggingcas.htm">Debugging Managed Custom Actions</a></li> | ||
30 | <li><a href="installutil.htm">About InstallUtil</a></li> | ||
31 | </ul> | ||
32 | |||
33 | </div> | ||
34 | |||
35 | <div id="footer"> | ||
36 | <p /> | ||
37 | Send comments on this topic to <a id="HT_MailLink" href="mailto:wix-users%40lists.sourceforge.net?Subject=Deployment Tools Foundation Documentation"> | ||
38 | wix-users@lists.sourceforge.net</a> | ||
39 | |||
40 | <script type="text/javascript"> | ||
41 | var HT_mailLink = document.getElementById("HT_MailLink"); | ||
42 | var HT_mailLinkText = HT_mailLink.innerHTML; | ||
43 | HT_mailLink.href += ": " + document.title; | ||
44 | HT_mailLink.innerHTML = HT_mailLinkText; | ||
45 | </script> | ||
46 | |||
47 | <p /> | ||
48 | |||
49 | </div> | ||
50 | </div> | ||
51 | |||
52 | </body> | ||
53 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/msihelper.htm b/src/samples/Dtf/Documents/Guide/Content/msihelper.htm deleted file mode 100644 index c1493117..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/msihelper.htm +++ /dev/null | |||
@@ -1,59 +0,0 @@ | |||
1 | <!doctype HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > | ||
2 | <html> | ||
3 | <head> | ||
4 | <title>Included Components</title> | ||
5 | <meta http-equiv="Content-Type" content="text/html; charset=Windows-1252"> | ||
6 | <link rel="stylesheet" type="text/css" href="MSDN.css"> | ||
7 | </head> | ||
8 | <body id="bodyID" class="dtBODY"> | ||
9 | <div id="nsbanner"> | ||
10 | <div id="bannerrow1"> | ||
11 | <table class="bannerparthead" cellspacing="0" id="Table1"> | ||
12 | <tr id="hdr"> | ||
13 | <td class="runninghead">Managed Libraries for Windows Installer</td> | ||
14 | <td class="product"></td> | ||
15 | </tr> | ||
16 | </table> | ||
17 | </div> | ||
18 | <div id="TitleRow"> | ||
19 | <h1 class="dtH1">Helper Classes for Windows Installer Packages</h1> | ||
20 | </div> | ||
21 | </div> | ||
22 | <div id="nstext"> | ||
23 | <p>Included are some useful helper classes for working with | ||
24 | MSI and MSP packages:</p> | ||
25 | <ul> | ||
26 | <li><p><a href="ms-its:MMLRef.chm::/Microsoft.WindowsInstaller.InstallPackage.html" | ||
27 | ><strong>InstallPackage</strong></a> - extends the Database class to provide powerful | ||
28 | package-based operations such as:</p> | ||
29 | <ul> | ||
30 | <li>direct extraction of files to uncompressed source | ||
31 | path | ||
32 | <li>updating files from uncompressed source path back | ||
33 | into the compressed source for the package (including updating file | ||
34 | metadata) | ||
35 | <li>applying a patch directly to the package | ||
36 | <li>consolidating a package with uncompressed source files or multiple msm-cabs | ||
37 | into a package with a single compressed cabinet</li> | ||
38 | </ul> | ||
39 | <P></P> | ||
40 | <li><p><a href="ms-its:MMLRef.chm::/Microsoft.WindowsInstaller.InstallPathMap.html" | ||
41 | ><strong>InstallPathMap</strong>, <a href="ms-its:MMLRef.chm::/Microsoft.WindowsInstaller.InstallPath.html" | ||
42 | ><strong>InstallPath</strong></a> - represent the directory structure | ||
43 | of an installation package, including file, component, and directory source and target | ||
44 | install paths. Accessible by file, component, or directory keys; searchable by | ||
45 | filename.</p> | ||
46 | <li><p><a href="ms-its:MMLRef.chm::/Microsoft.WindowsInstaller.PatchPackage.html" | ||
47 | ><strong>PatchPackage</strong></a> - allows convenient access to patch properties, | ||
48 | and analysis and extraction of transforms</p></li> | ||
49 | </ul> | ||
50 | <p><br/></p> | ||
51 | <p>These classes are in the Microsoft.WindowsInstaller.Package.dll assembly.</p> | ||
52 | <p><br/></p> | ||
53 | <p><b>See also:</b></p> | ||
54 | <p>The <a href="wifile.htm">WiFile</a> sample tool demonstrates some usage of the | ||
55 | InstallPackage class.</p> | ||
56 | <p><br/></p> | ||
57 | </div> | ||
58 | </body> | ||
59 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/msiwrapper.htm b/src/samples/Dtf/Documents/Guide/Content/msiwrapper.htm deleted file mode 100644 index 70190ac4..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/msiwrapper.htm +++ /dev/null | |||
@@ -1,80 +0,0 @@ | |||
1 | <!doctype HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > | ||
2 | <html> | ||
3 | <head> | ||
4 | <title>Included Components</title> | ||
5 | <meta http-equiv="Content-Type" content="text/html; charset=Windows-1252"> | ||
6 | <link rel="stylesheet" type="text/css" href="MSDN.css"> | ||
7 | </head> | ||
8 | <body id="bodyID" class="dtBODY"> | ||
9 | <div id="nsbanner"> | ||
10 | <div id="bannerrow1"> | ||
11 | <table class="bannerparthead" cellspacing="0" id="Table1"> | ||
12 | <tr id="hdr"> | ||
13 | <td class="runninghead">Managed Libraries for Windows Installer</td> | ||
14 | <td class="product"></td> | ||
15 | </tr> | ||
16 | </table> | ||
17 | </div> | ||
18 | <div id="TitleRow"> | ||
19 | <h1 class="dtH1">Managed wrapper library for Windows Installer APIs</h1> | ||
20 | </div> | ||
21 | </div> | ||
22 | <div id="nstext"> | ||
23 | <p>Microsoft.WindowsInstaller.dll is a complete .NET wrapper for the | ||
24 | Windows Installer APIs. It provides a convenient object model that is | ||
25 | comfortable to .NET developers and still familiar to anyone who has used | ||
26 | the MSI scripting object model.</p> | ||
27 | <h3>Notes</h3> | ||
28 | <ul> | ||
29 | <li><p>All published MSI APIs are wrapped, with the exception of four: | ||
30 | MsiGetFileSignatureInformation (because I don't know of a .NET analog for the | ||
31 | returned certificate structure), and three APIs for previewing UI dialogs. | ||
32 | Other than that, you should be able to do everything that you can | ||
33 | do via the C APIs or the COM automation interface.</p> | ||
34 | <li><p>Some parts of this code have never had a formal test | ||
35 | pass, so use at your own risk. But much of the code is exercised daily, used | ||
36 | by the Developer Division Sustaining Engineering team's BRIQS system to build | ||
37 | and test patches. And it has been in use by many other teams for over two | ||
38 | years now with only a few minor fixes, so it can be considered very stable.</p> | ||
39 | <li><p>Despite its official-sounding namespace, this assembly is not officially | ||
40 | sanctioned by the Windows Installer team. But currently there are not any | ||
41 | plans for an official set of managed even in Longhorn, so I don't see a | ||
42 | conflict for now.</p></li> | ||
43 | </ul> | ||
44 | <h3>Why rewrite it?</h3> | ||
45 | <p>It is possible to access MSI's COM Automation interfaces via C# and VB.NET. | ||
46 | So why create yet another wrapper? Here are some of my reasons:</p> | ||
47 | <ul> | ||
48 | <li><p>One of the primary things I wanted to be able to do | ||
49 | was write custom actions in C#. The automation interface was not usable in | ||
50 | that case, because there is no way to convert the integer session handle | ||
51 | (received as a parameter to the type 1 custom action function) into a Session | ||
52 | automation object.</p> | ||
53 | <li><p>The automation interface does not provide a way to | ||
54 | specify an external UI handler. Besides external UI, this is also needed | ||
55 | to do validation.</p> | ||
56 | <li><p>The automation interface does not provide a way to | ||
57 | explicitly close handles (other than Views). I ran into this problem when I | ||
58 | wanted to programmatically delete a database that I'd just finished using, but | ||
59 | couldn't because it was still open!</p> | ||
60 | <li><p>Finally, COM Automation is somewhat slower than invoking | ||
61 | the APIs directly.</p></li> | ||
62 | </ul> | ||
63 | |||
64 | <p><br/></p> | ||
65 | <p><b>See also:</b></p> | ||
66 | <ul> | ||
67 | <li><a href="ms-its:MMLRef.chm::/Microsoft.WindowsInstaller.html">Microsoft.WindowsInstaller Namespace</a></li> | ||
68 | <ul> | ||
69 | <li><a href="ms-its:MMLRef.chm::/Microsoft.WindowsInstaller.Installer.html">Installer Class</a></li> | ||
70 | <li><a href="ms-its:MMLRef.chm::/Microsoft.WindowsInstaller.Database.html">Database Class</a></li> | ||
71 | <li><a href="ms-its:MMLRef.chm::/Microsoft.WindowsInstaller.Session.html">Session Class</a></li> | ||
72 | </ul> | ||
73 | <li><a href="msihelper.htm">Helper Classes for Windows Installer Packages</a></li> | ||
74 | <li><a href="writingcas.htm">Writing Managed Custom Actions</a></li> | ||
75 | <li><a href="databases.htm">Working with MSI Databases</a></li> | ||
76 | </ul> | ||
77 | <p><br/></p> | ||
78 | </div> | ||
79 | </body> | ||
80 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/packages.htm b/src/samples/Dtf/Documents/Guide/Content/packages.htm deleted file mode 100644 index aa521685..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/packages.htm +++ /dev/null | |||
@@ -1,86 +0,0 @@ | |||
1 | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
2 | <head> | ||
3 | <title>Working with Install Packages</title> | ||
4 | <link rel="stylesheet" type="text/css" href="../styles/presentation.css" /> | ||
5 | <link rel="stylesheet" type="text/css" href="ms-help://Hx/HxRuntime/HxLink.css" /> | ||
6 | </head> | ||
7 | |||
8 | <body> | ||
9 | |||
10 | <div id="control"> | ||
11 | <span class="productTitle">Deployment Tools Foundation</span><br /> | ||
12 | <span class="topicTitle">Working with Install Packages</span><br /> | ||
13 | <div id="toolbar"> | ||
14 | <span id="chickenFeet"> | ||
15 | <a href="using.htm">Development Guide</a> > | ||
16 | <span class="nolink">Install Packages</span> | ||
17 | </span> | ||
18 | </div> | ||
19 | </div> | ||
20 | <div id="main"> | ||
21 | <div id="header"> | ||
22 | </div> | ||
23 | <div class="summary"> | ||
24 | |||
25 | <h3>Updating files in a product layout</h3> | ||
26 | <p>The InstallPackage class makes it easy to work with files and cabinets | ||
27 | in the context of a compressed or uncompressed product layout.</p> | ||
28 | <p>This hypothetical example takes an IDictionary 'files' which maps file keys to file paths. Each | ||
29 | file is to be updated in the package layout; cabinets are even recompressed if necessary to include the new files.</p> | ||
30 | <pre><font face="Consolas, Courier New"> <font color=blue>using</font> (InstallPackage pkg = <font color=blue>new</font> InstallPackage(<font color=purple>"d:\builds\product.msi"</font>, | ||
31 | DatabaseOpenMode.Transact)) | ||
32 | { | ||
33 | pkg.WorkingDirectory = Path.Combine(Path.GetTempFolder(), <font color=purple>"pkgtmp"</font>); | ||
34 | <font color=blue>foreach</font> (string fileKey in files.Keys) | ||
35 | { | ||
36 | <font color=blue>string</font> sourceFilePath = files[fileKey]; | ||
37 | <font color=blue>string</font> destFilePath = pkg.Files[fileKey].SourcePath; | ||
38 | destFilePath = Path.Combine(pkg.WorkingDirectory, destFilePath); | ||
39 | File.Copy(sourceFilePath, destFilePath, <font color=blue>true</font>); | ||
40 | } | ||
41 | pkg.UpdateFiles(<font color=blue>new</font> ArrayList(files.Keys)); | ||
42 | pkg.Commit(); | ||
43 | Directory.Delete(pkg.WorkingDirectory, <font color=blue>true</font>); | ||
44 | }</font></pre><br /> | ||
45 | <p>1. Create a <a href="DTFAPI.chm::/html/Overload_Microsoft_Deployment_WindowsInstaller_Package_InstallPackage__ctor.htm">new InstallPackage</a> | ||
46 | instance referring to the location of the .msi. This is actually just a specialized subclass of a Database.</p> | ||
47 | <p>2. Set the <a href="DTFAPI.chm::/html/P_Microsoft_Deployment_WindowsInstaller_Package_InstallPackage_WorkingDirectory.htm">WorkingDirectory</a>. | ||
48 | This is the root directory where the package expects to find the new source files.</p> | ||
49 | <p>3. Copy each file to its proper location in the working directory. The | ||
50 | <a href="DTFAPI.chm::/html/P_Microsoft_Deployment_WindowsInstaller_Package_InstallPackage_Files.htm">InstallPackage.Files</a> | ||
51 | property is used to look up the relative source path of each file.</p> | ||
52 | <p>4. Call <a href="DTFAPI.chm::/html/Overload_Microsoft_Deployment_WindowsInstaller_Package_InstallPackage_UpdateFiles.htm">InstallPackage.UpdateFiles</a> | ||
53 | with the list of file keys. This will re-compress and package the files if necessary, and also update the | ||
54 | following data: File.FileSize, File.Version, File.Language, MsiFileHash.HashPart*.</p> | ||
55 | <p>5. Commit the database changes and cleanup the working directory.</p> | ||
56 | </ul> | ||
57 | |||
58 | <p><br/></p> | ||
59 | <p><b>See also:</b></p> | ||
60 | <ul> | ||
61 | <li><a href="wifile.htm">WiFile Sample Tool</a> - a more complete tool that expands on the above example.</li> | ||
62 | <li><a href="DTFAPI.chm::/html/T_Microsoft_Deployment_WindowsInstaller_Package_InstallPackage.htm">InstallPackage Class</a></li> | ||
63 | </ul> | ||
64 | <p><br/></p> | ||
65 | |||
66 | </div> | ||
67 | |||
68 | <div id="footer"> | ||
69 | <p /> | ||
70 | Send comments on this topic to <a id="HT_MailLink" href="mailto:wix-users%40lists.sourceforge.net?Subject=Deployment Tools Foundation Documentation"> | ||
71 | wix-users@lists.sourceforge.net</a> | ||
72 | |||
73 | <script type="text/javascript"> | ||
74 | var HT_mailLink = document.getElementById("HT_MailLink"); | ||
75 | var HT_mailLinkText = HT_mailLink.innerHTML; | ||
76 | HT_mailLink.href += ": " + document.title; | ||
77 | HT_mailLink.innerHTML = HT_mailLinkText; | ||
78 | </script> | ||
79 | |||
80 | <p /> | ||
81 | |||
82 | </div> | ||
83 | </div> | ||
84 | |||
85 | </body> | ||
86 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/powerdiff.htm b/src/samples/Dtf/Documents/Guide/Content/powerdiff.htm deleted file mode 100644 index f420b47e..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/powerdiff.htm +++ /dev/null | |||
@@ -1,71 +0,0 @@ | |||
1 | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
2 | <head> | ||
3 | <title>MSI, MSP, CAB Diff Tool</title> | ||
4 | <link rel="stylesheet" type="text/css" href="../styles/presentation.css" /> | ||
5 | <link rel="stylesheet" type="text/css" href="ms-help://Hx/HxRuntime/HxLink.css" /> | ||
6 | </head> | ||
7 | |||
8 | <body> | ||
9 | |||
10 | <div id="control"> | ||
11 | <span class="productTitle">Deployment Tools Foundation</span><br /> | ||
12 | <span class="topicTitle">MSI, MSP, CAB Diff Tool</span><br /> | ||
13 | <div id="toolbar"> | ||
14 | <span id="chickenFeet"> | ||
15 | <a href="using.htm">Development Guide</a> > | ||
16 | <a href="samples.htm">Samples</a> > | ||
17 | <span class="nolink">DDiff</span> | ||
18 | </span> | ||
19 | </div> | ||
20 | </div> | ||
21 | <div id="main"> | ||
22 | <div id="header"> | ||
23 | </div> | ||
24 | <div class="summary"> | ||
25 | <h2>MSI, MSP, CAB Diff Tool</h2> | ||
26 | |||
27 | <p><pre><font face="Consolas, Courier New">Usage: DDiff target1 target2 [options] | ||
28 | Example: DDiff d:\dir1 d:\dir2 | ||
29 | Example: DDiff setup1.msi setup2.msi | ||
30 | Example: DDiff patch1.msp patch2.msp -patchtarget target.msi | ||
31 | Example: DDiff package1.cab package2.cab | ||
32 | |||
33 | Options: | ||
34 | /o [filename] Output results to text file (UTF8) | ||
35 | /p [package.msi] Diff patches relative to target MSI</font></pre> | ||
36 | </p> | ||
37 | <p><br/></p> | ||
38 | |||
39 | <p>The following types of inputs can be diffed: | ||
40 | <ul> | ||
41 | <li><b>Directories</b>: files and subdirectories are compared.</li> | ||
42 | <li><b>Cab files</b>: internal file list and files are compared.</li> | ||
43 | <li><b>MSI/MSM database files</b>: summary info, tables, and embedded binary and cab streams are compared.</li> | ||
44 | <li><b>MSP files</b>: summary info and embedded file cab are compared. When a patch target MSI is provided, the MSP's tables are also compared.</li> | ||
45 | <li><b>Versioned files</b>: Win32 file version is compared.</li> | ||
46 | <li><b>Text files</b>: if diff.exe is in the path, it is used to get a line-by-line diff.</li> | ||
47 | <li><b>Other files</b>: file size and bytes are compared.</li> | ||
48 | </ul> | ||
49 | All processing is done recursively. So a versioned file within a cab within an MSI within a directory will have meaningful diff results.</p> | ||
50 | |||
51 | <p><br/></p> | ||
52 | </div> | ||
53 | <div id="footer"> | ||
54 | <p /> | ||
55 | Send comments on this topic to <a id="HT_MailLink" href="mailto:wix-users%40lists.sourceforge.net?Subject=Deployment Tools Foundation Documentation"> | ||
56 | wix-users@lists.sourceforge.net</a> | ||
57 | |||
58 | <script type="text/javascript"> | ||
59 | var HT_mailLink = document.getElementById("HT_MailLink"); | ||
60 | var HT_mailLinkText = HT_mailLink.innerHTML; | ||
61 | HT_mailLink.href += ": " + document.title; | ||
62 | HT_mailLink.innerHTML = HT_mailLinkText; | ||
63 | </script> | ||
64 | |||
65 | <p /> | ||
66 | |||
67 | </div> | ||
68 | </div> | ||
69 | |||
70 | </body> | ||
71 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/samplecas.htm b/src/samples/Dtf/Documents/Guide/Content/samplecas.htm deleted file mode 100644 index 4dfed6f0..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/samplecas.htm +++ /dev/null | |||
@@ -1,84 +0,0 @@ | |||
1 | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
2 | <head> | ||
3 | <title>Sample C# Custom Action</title> | ||
4 | <link rel="stylesheet" type="text/css" href="../styles/presentation.css" /> | ||
5 | <link rel="stylesheet" type="text/css" href="ms-help://Hx/HxRuntime/HxLink.css" /> | ||
6 | </head> | ||
7 | |||
8 | <body> | ||
9 | |||
10 | <div id="control"> | ||
11 | <span class="productTitle">Deployment Tools Foundation</span><br /> | ||
12 | <span class="topicTitle">Sample C# Custom Action</span><br /> | ||
13 | <div id="toolbar"> | ||
14 | <span id="chickenFeet"> | ||
15 | <a href="using.htm">Development Guide</a> > | ||
16 | <a href="managedcas.htm">Managed CAs</a> > | ||
17 | <a href="writingcas.htm">Writing CAs</a> > | ||
18 | <span class="nolink">C# Sample</span> | ||
19 | </span> | ||
20 | </div> | ||
21 | </div> | ||
22 | <div id="main"> | ||
23 | <div id="header"> | ||
24 | </div> | ||
25 | <div class="summary"> | ||
26 | |||
27 | <p>MSI custom actions are MUCH easier to write in C# than | ||
28 | in C++!</p><pre><font face="Consolas, Courier New"> [CustomAction] | ||
29 | <font color=blue>public</font> <font color=blue>static</font> ActionResult SampleCustomAction1(Session session) | ||
30 | { | ||
31 | session.Log(<font color="purple">"Hello from SampleCA1"</font>); | ||
32 | |||
33 | <font color=blue>string</font> testProp = session[<font color="purple">"SampleCATest"</font>]; | ||
34 | <font color=blue>string</font> testProp2; | ||
35 | testProp2 = (<font color="blue">string</font>) session.Database.ExecuteScalar( | ||
36 | <font color="purple">"SELECT `Value` FROM `Property` WHERE `Property` = 'SampleCATest'"</font>); | ||
37 | |||
38 | <font color=blue>if</font>(testProp == testProp2) | ||
39 | { | ||
40 | session.Log(<font color="purple">"Simple property test passed."</font>); | ||
41 | <font color=blue>return</font> ActionResult.Success; | ||
42 | } | ||
43 | <font color=blue>else</font> | ||
44 | <font color=blue>return</font> ActionResult.Failure; | ||
45 | } | ||
46 | </font></pre> | ||
47 | <p>A sample CA project with two CAs is included in the | ||
48 | Samples\ManagedCA directory. Running the CustomActionTest project will package the CA and insert | ||
49 | it into a test MSI. The MSI will invoke the custom actions, but it will not install anything | ||
50 | since the second sample CA returns ActionResult.UserExit. | ||
51 | </p> | ||
52 | |||
53 | <p><br/></p> | ||
54 | <p><b>See also:</b></p> | ||
55 | <ul> | ||
56 | <li><a href="writingcas.htm">Writing Managed Custom Actions</a></li> | ||
57 | <li><a href="caconfig.htm">Specifying the Runtime Version</a></li> | ||
58 | <li><a href="databases.htm">Working with MSI Databases</a></li> | ||
59 | <li><a href="buildingcas.htm">Building Managed Custom Actions</a></li> | ||
60 | <li><a href="debuggingcas.htm">Debugging Managed Custom Actions</a></li> | ||
61 | </ul> | ||
62 | <p><br/></p> | ||
63 | |||
64 | </div> | ||
65 | |||
66 | <div id="footer"> | ||
67 | <p /> | ||
68 | Send comments on this topic to <a id="HT_MailLink" href="mailto:wix-users%40lists.sourceforge.net?Subject=Deployment Tools Foundation Documentation"> | ||
69 | wix-users@lists.sourceforge.net</a> | ||
70 | |||
71 | <script type="text/javascript"> | ||
72 | var HT_mailLink = document.getElementById("HT_MailLink"); | ||
73 | var HT_mailLinkText = HT_mailLink.innerHTML; | ||
74 | HT_mailLink.href += ": " + document.title; | ||
75 | HT_mailLink.innerHTML = HT_mailLinkText; | ||
76 | </script> | ||
77 | |||
78 | <p /> | ||
79 | |||
80 | </div> | ||
81 | </div> | ||
82 | |||
83 | </body> | ||
84 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/samples.htm b/src/samples/Dtf/Documents/Guide/Content/samples.htm deleted file mode 100644 index 3bcd379a..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/samples.htm +++ /dev/null | |||
@@ -1,59 +0,0 @@ | |||
1 | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
2 | <head> | ||
3 | <title>Sample Applications</title> | ||
4 | <link rel="stylesheet" type="text/css" href="../styles/presentation.css" /> | ||
5 | <link rel="stylesheet" type="text/css" href="ms-help://Hx/HxRuntime/HxLink.css" /> | ||
6 | </head> | ||
7 | |||
8 | <body> | ||
9 | |||
10 | <div id="control"> | ||
11 | <span class="productTitle">Deployment Tools Foundation</span><br /> | ||
12 | <span class="topicTitle">Sample Applications</span><br /> | ||
13 | <div id="toolbar"> | ||
14 | <span id="chickenFeet"> | ||
15 | <a href="using.htm">Development Guide</a> > | ||
16 | <span class="nolink">Samples</span> | ||
17 | </span> | ||
18 | </div> | ||
19 | </div> | ||
20 | <div id="main"> | ||
21 | <div id="header"> | ||
22 | </div> | ||
23 | <div class="summary"> | ||
24 | <p>Besides the simple managed custom action sample, there are three functional | ||
25 | and useful sample tools included in this distribution:</p> | ||
26 | <p><a href="Inventory.htm"><b>MSI Inventory</b></a><br/> | ||
27 | Shows a hierarchical, relational, searchable view of all of the product, | ||
28 | feature, component, file, and patch data managed by MSI, for all products | ||
29 | installed on the system.</p> | ||
30 | <p><a href="WiFile.htm"><b>WiFile</b></a><br/> | ||
31 | Extracts and updates cabbed files in an MSI setup.</p> | ||
32 | <p><a href="CabPack.htm"><b>CabPack</b></a><br/> | ||
33 | Creates simple self-extracting cab packages. OK, so this one isn't | ||
34 | especially useful as a tool, but the code should be helpful.</p> | ||
35 | <p><a href="PowerDiff.htm"><b>DDiff</b></a><br/> | ||
36 | Recursively diffs MSI, MSP, CAB, and other files and directories. | ||
37 | Much more thorough than widiffdb.vbs.</p> | ||
38 | <p><br/></p> | ||
39 | </div> | ||
40 | |||
41 | <div id="footer"> | ||
42 | <p /> | ||
43 | Send comments on this topic to <a id="HT_MailLink" href="mailto:wix-users%40lists.sourceforge.net?Subject=Deployment Tools Foundation Documentation"> | ||
44 | wix-users@lists.sourceforge.net</a> | ||
45 | |||
46 | <script type="text/javascript"> | ||
47 | var HT_mailLink = document.getElementById("HT_MailLink"); | ||
48 | var HT_mailLinkText = HT_mailLink.innerHTML; | ||
49 | HT_mailLink.href += ": " + document.title; | ||
50 | HT_mailLink.innerHTML = HT_mailLinkText; | ||
51 | </script> | ||
52 | |||
53 | <p /> | ||
54 | |||
55 | </div> | ||
56 | </div> | ||
57 | |||
58 | </body> | ||
59 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/support.htm b/src/samples/Dtf/Documents/Guide/Content/support.htm deleted file mode 100644 index 89acbadf..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/support.htm +++ /dev/null | |||
@@ -1,52 +0,0 @@ | |||
1 | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
2 | <head> | ||
3 | <title>Support/Bugs</title> | ||
4 | <link rel="stylesheet" type="text/css" href="../styles/presentation.css" /> | ||
5 | <link rel="stylesheet" type="text/css" href="ms-help://Hx/HxRuntime/HxLink.css" /> | ||
6 | </head> | ||
7 | |||
8 | <body> | ||
9 | |||
10 | <div id="control"> | ||
11 | <span class="productTitle">Deployment Tools Foundation</span><br /> | ||
12 | <span class="topicTitle">Support/Bugs</span><br /> | ||
13 | <div id="toolbar"> | ||
14 | <span id="chickenFeet"> | ||
15 | <a href="about.htm">Overview</a> > | ||
16 | <span class="nolink">Support/Bugs</span> | ||
17 | </span> | ||
18 | </div> | ||
19 | </div> | ||
20 | <div id="main"> | ||
21 | <div id="header"> | ||
22 | </div> | ||
23 | <div class="summary"> | ||
24 | <p>Please send general support questions or comments to the | ||
25 | <a href="mailto:wix-users@sourceforge.net">wix-users</a> discussion list.</p> | ||
26 | |||
27 | <p>Bugs, suggestions, or feature requests can be submitted at the | ||
28 | <a href="http://wix.sourceforge.net/">WiX project</a> | ||
29 | on Sourceforge.net.</p> | ||
30 | |||
31 | <p><br/></p> | ||
32 | </div> | ||
33 | |||
34 | <div id="footer"> | ||
35 | <p /> | ||
36 | Send comments on this topic to <a id="HT_MailLink" href="mailto:wix-users%40lists.sourceforge.net?Subject=Deployment Tools Foundation Documentation"> | ||
37 | wix-users@lists.sourceforge.net</a> | ||
38 | |||
39 | <script type="text/javascript"> | ||
40 | var HT_mailLink = document.getElementById("HT_MailLink"); | ||
41 | var HT_mailLinkText = HT_mailLink.innerHTML; | ||
42 | HT_mailLink.href += ": " + document.title; | ||
43 | HT_mailLink.innerHTML = HT_mailLinkText; | ||
44 | </script> | ||
45 | |||
46 | <p /> | ||
47 | |||
48 | </div> | ||
49 | </div> | ||
50 | |||
51 | </body> | ||
52 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/using.htm b/src/samples/Dtf/Documents/Guide/Content/using.htm deleted file mode 100644 index 6fe960e8..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/using.htm +++ /dev/null | |||
@@ -1,50 +0,0 @@ | |||
1 | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
2 | <head> | ||
3 | <title>Deployment Tools Foundation Development Guide</title> | ||
4 | <link rel="stylesheet" type="text/css" href="../styles/presentation.css" /> | ||
5 | <link rel="stylesheet" type="text/css" href="ms-help://Hx/HxRuntime/HxLink.css" /> | ||
6 | </head> | ||
7 | |||
8 | <body> | ||
9 | |||
10 | <div id="control"> | ||
11 | <span class="productTitle">Deployment Tools Foundation</span><br /> | ||
12 | <span class="topicTitle">Deployment Tools Foundation Development Guide</span><br /> | ||
13 | <div id="toolbar"> | ||
14 | <span id="chickenFeet"> | ||
15 | <span class="nolink">Development Guide</span> | ||
16 | </span> | ||
17 | </div> | ||
18 | </div> | ||
19 | <div id="main"> | ||
20 | <div id="header"> | ||
21 | </div> | ||
22 | <div class="summary"> | ||
23 | <ul> | ||
24 | <li><a href="managedcas.htm">Managed Custom Actions</a></li> | ||
25 | <li><a href="databases.htm">Working with MSI Databases</a></li> | ||
26 | <li><a href="cabs.htm">Working with Cabinet Files</a></li> | ||
27 | <li><a href="packages.htm">Working with Install Packages</a></li> | ||
28 | <li><a href="samples.htm">Sample Applications</a></li> | ||
29 | </ul> | ||
30 | </div> | ||
31 | |||
32 | <div id="footer"> | ||
33 | <p /> | ||
34 | Send comments on this topic to <a id="HT_MailLink" href="mailto:wix-users%40lists.sourceforge.net?Subject=Deployment Tools Foundation Documentation"> | ||
35 | wix-users@lists.sourceforge.net</a> | ||
36 | |||
37 | <script type="text/javascript"> | ||
38 | var HT_mailLink = document.getElementById("HT_MailLink"); | ||
39 | var HT_mailLinkText = HT_mailLink.innerHTML; | ||
40 | HT_mailLink.href += ": " + document.title; | ||
41 | HT_mailLink.innerHTML = HT_mailLinkText; | ||
42 | </script> | ||
43 | |||
44 | <p /> | ||
45 | |||
46 | </div> | ||
47 | </div> | ||
48 | |||
49 | </body> | ||
50 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/whatsnew.htm b/src/samples/Dtf/Documents/Guide/Content/whatsnew.htm deleted file mode 100644 index 3efe67bd..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/whatsnew.htm +++ /dev/null | |||
@@ -1,257 +0,0 @@ | |||
1 | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
2 | <head> | ||
3 | <title>What's New?</title> | ||
4 | <link rel="stylesheet" type="text/css" href="../styles/presentation.css" /> | ||
5 | <link rel="stylesheet" type="text/css" href="ms-help://Hx/HxRuntime/HxLink.css" /> | ||
6 | </head> | ||
7 | |||
8 | <body> | ||
9 | |||
10 | <div id="control"> | ||
11 | <span class="productTitle">Deployment Tools Foundation</span><br /> | ||
12 | <span class="topicTitle">What's New?</span><br /> | ||
13 | <div id="toolbar"> | ||
14 | <span id="chickenFeet"> | ||
15 | <a href="about.htm">Overview</a> > | ||
16 | <span class="nolink">What's New?</span> | ||
17 | </span> | ||
18 | <span id="languageFilter">2007-07-03</span> | ||
19 | </div> | ||
20 | </div> | ||
21 | <div id="main"> | ||
22 | <div id="header"> | ||
23 | </div> | ||
24 | <div class="summary"> | ||
25 | |||
26 | <h3>Highlights</h3> | ||
27 | <ul> | ||
28 | <li><p>New project name name "Deployment Tools Foundation", and | ||
29 | new namespaces <font face="Consolas, Courier New">WixToolset.Dtf.*</font></p></li> | ||
30 | <li><p>Added ZIP compression library</p></li> | ||
31 | <li><p>Added library for reading/writing Win32 resources including file versions</p></li> | ||
32 | <li><p>Managed custom action improvements:</p><ul> | ||
33 | <li><p>Simplified authoring and building -- new MakeSfxCA tool | ||
34 | automatically maps DLL entrypoints to CA methods.</p></li> | ||
35 | <li><p>Managed custom action DLLs now run in a separate process for | ||
36 | better reliability with respect to CLR versions, but still have | ||
37 | full access to the MSI session.</p></li> | ||
38 | </ul></li> | ||
39 | <li><p>Found and fixed many bugs with extensive unit test suite</p></li> | ||
40 | <li><p>LINQ to MSI ! (preview)</p></li> | ||
41 | </ul> | ||
42 | |||
43 | <p>Unfortunately, all these changes do mean that migrating tools and applications from | ||
44 | the previous release can be a moderate amount of work.</p> | ||
45 | |||
46 | <h3>Breaking Changes</h3> | ||
47 | <p>For the first time since v1.0, this release contains some major breaking | ||
48 | changes, due to a significant redesign and cleanup effort that has been a | ||
49 | long time coming. The overall purpose of the changes is to bring the class | ||
50 | libraries much closer to ship-quality.</p> | ||
51 | <ul> | ||
52 | <li><p>All libraries use a new namespace hierarchy | ||
53 | under <font face="Consolas, Courier New">WixToolset.Dtf</font>. | ||
54 | The new namespace aligns with the new project name, gives all the various | ||
55 | libraries an identity that makes them obviously related to the DTF project, | ||
56 | and mostly avoids "taking over" a namespace that might be rightfully owned | ||
57 | by the platform technology owner.</p></li> | ||
58 | |||
59 | <li><p>Assemblies are also renamed to follow namespaces.</p></li> | ||
60 | |||
61 | <li><p>A new unified compression framework forms the basis for the new ZIP | ||
62 | library and a redesigned CAB library. Additional archive formats can | ||
63 | be plugged into the framework. The stream-based compression APIs have | ||
64 | been redesigned to be more object-oriented and easier to use. The file-based | ||
65 | APIs are mostly unchanged from the old cabinet library, although some names | ||
66 | have changed in order to fit into the new unified framework.</p></li> | ||
67 | |||
68 | <li><p>Large parts of the WindowsInstaller library have been redesigned | ||
69 | to be more object-oriented and to better follow .NET Framework design | ||
70 | guidelines. And various APIs throughout the library have naming or other | ||
71 | changes for better consistency and to follow conventions and best | ||
72 | pratices as enforced by FxCop.</p></li> | ||
73 | |||
74 | <li><p>The WindowsInstaller APIs no longer make any attempt to mimic the | ||
75 | MSI COM automation interfaces. The naming and object patterns in the | ||
76 | automation interfaces often conflicted with with best practices for | ||
77 | .NET Framework class libraries. Since most people start using DTF | ||
78 | without having ever experienced MSI scripting, there is little | ||
79 | reason to match the scripting object model. Making the APIs more | ||
80 | consistent with .NET conventions will make them much easier to use | ||
81 | for people already experienced with the .NET Framework.</p></li> | ||
82 | |||
83 | <li><p>APIs in all class libraries use generics where appropriate, especially | ||
84 | the generic collection interfaces. This means .NET Framework 2.0 or later | ||
85 | is required.</p></li> | ||
86 | |||
87 | <li><p>The FilePatch library is missing from this release. An updated | ||
88 | and redesigned file-delta library is in development.</p></li> | ||
89 | </ul> | ||
90 | |||
91 | <h3>Other Changes</h3> | ||
92 | <ul> | ||
93 | <li><p>New MakeSfxCA tool for building managed custom action packages: In addition to | ||
94 | packaging the CA DLL and dependencies, it automatically detects managed CA methods | ||
95 | and generates corresponding unmanaged DLL entrypoints in the CA host DLL (SfxCA.dll), | ||
96 | where they are called by MSI. Previously it was necessary to either provide this | ||
97 | mapping in a CustomAction.config file, or live with the generic "ManagedCustomActionN" | ||
98 | names when authoring the CustomAction table in the MSI. For more info, see the | ||
99 | help topic on building managed custom actions.</p></li> | ||
100 | |||
101 | <li><p>Out-of-proc managed custom action DLLs: | ||
102 | When a managed custom action runs, it normally requests a specific major | ||
103 | version of the CLR via CustomAction.config. However in the previous implementation, | ||
104 | the request could be ignored if there was already a different version of the CLR | ||
105 | loaded into the MSI process, either from a previous custom action or by some other | ||
106 | means. (The CLR doesn't allow side-by-side versions within the same process.) | ||
107 | While there have been no reports of this issue causing setup failures in practice, | ||
108 | it may be only a matter of time, as new CLR versions keep coming out.</p> | ||
109 | |||
110 | <p>The redesigned native host for managed custom actions, SfxCA.dll, re-launches | ||
111 | itself in a separate process before loading the CLR and invoking the managed CA. | ||
112 | This ensures that the desired CLR version is always loaded, assuming it is available | ||
113 | on the system. It also sets up a named-pipe remoting channel between the two processes. | ||
114 | All session-related MSI API calls are routed through that channel, so that the | ||
115 | custom action has full access to the installer session just as if it were | ||
116 | running in-process.</p></li> | ||
117 | |||
118 | <li><p>The new zip compression library supports nearly all features of the zip | ||
119 | file format. This includes the ZIP64 extensions for archives greater than 4GB, | ||
120 | as well as disk-spanning capabilities. Zip encryption is not supported. The zip | ||
121 | library has been tested against a variety of third-party zip tools; please | ||
122 | report any issues with incompatible packages.</p> | ||
123 | |||
124 | <p>Currently only the basic DEFLATE compression algorithm is supported | ||
125 | (via System.IO.Compression.DeflateStream), and the compression level is not adjustable | ||
126 | when packing an archive. The zip file format has a mechanism for plugging in arbitrary | ||
127 | compression algorithms, and that capability is exposed: you can provide a Stream object | ||
128 | capable of compressing and decompressing bytes as an alternative to DeflateStream.</p></li> | ||
129 | |||
130 | <li><p>Added support for the few APIs new in MSI 4.0:</p> | ||
131 | <ul> | ||
132 | <li><font face="Consolas, Courier New">Installer.GetPatchFileList()</font></li> | ||
133 | <li><font face="Consolas, Courier New">InstallLogModes.RMFilesInUse</font></li> | ||
134 | <li><font face="Consolas, Courier New">ComponentAttributes.DisableRegistryReflection</font></li> | ||
135 | <li><font face="Consolas, Courier New">ControlAttributes.ElevationShield</font></li> | ||
136 | </ul> <br /></li> | ||
137 | |||
138 | <li><p>The documentation is now built with the | ||
139 | <a href="http://msdn2.microsoft.com/en-us/vstudio/bb608422.aspx" target="_blank">Sandcastle</a> doc build engine, | ||
140 | with help from the <a href="http://www.codeplex.com/SHFB" target="_blank">Sandcastle | ||
141 | Help File Builder</a>. (The old CHM was built with NDoc.)</p></li> | ||
142 | |||
143 | <li><p>The documentation includes detailed class diagrams for the | ||
144 | WindowsInstaller and Compression namespaces.</p></li> | ||
145 | |||
146 | <li><p>WindowsInstaller API doc topics now link straight to the corresponding | ||
147 | unmanaged MSI API topics in MSDN. If you know an unmanaged MSI API you want to | ||
148 | use but don't know the managed equivalent, you can search for it and find what | ||
149 | managed APIs link to it.</p></li> | ||
150 | |||
151 | <li><p>Unit tests cover about 90% of the Compression, Compression.Zip, and | ||
152 | Compression.Cab assemblies -- basically everything except some rare | ||
153 | error-handling cases.</p></li> | ||
154 | |||
155 | <li><p>Unit tests along with samples cover over 50% of the WindowsInstaller and | ||
156 | WindowsInstaller.Package assemblies (including custom action functionality). More | ||
157 | test cases are still being added.</p></li> | ||
158 | </ul> | ||
159 | |||
160 | <h3>Bugfixes</h3> | ||
161 | <p>In addition to the extensive cleanup due to redesigns and unit tests, the following | ||
162 | reported bugs have been fixed:</p> | ||
163 | <ul> | ||
164 | <li><p>Managed custom actions could in rare instances fail to load with error 183 | ||
165 | (directory already exists)</p></li> | ||
166 | <li><p>Timestamps of files in a cabinet could be incorrectly offset based on the timezone. | ||
167 | (This was due to a behavior change in the DateTime class between .NET 1.1 and 2.0.)</p></li> | ||
168 | <li><p>Unicode file paths for cabbed files could be handled incorrectly in some cases</p></li> | ||
169 | <li><p>Installer.DetermineApplicablePatches just didn't work</p></li> | ||
170 | <li><p>InstallPackage.ApplyPatch couldn't handle applying multiple patches to the same layout</p></li> | ||
171 | </ul> | ||
172 | |||
173 | <h3>LINQ to MSI</h3> | ||
174 | <p><i>You'll never want to write MSI SQL again!</i></p> | ||
175 | <p>Language INtegrated Query is a new feature in .NET Framework 3.5 and C# 3.0. Through | ||
176 | a combination of intuitive language syntax and powerful query operations, LINQ provides | ||
177 | a whole new level of productivity for working with data in your code. While the .NET | ||
178 | Framework 3.5 provides LINQ capability for SQL databases and XML data, now you | ||
179 | can write LINQ queries to fetch and even update data in MSI databases!</p> | ||
180 | |||
181 | <p>Look at the following example:<br /> | ||
182 | |||
183 | <pre><font face="Consolas, Courier New"> <font color="blue">var</font> actions = <font color="blue">from</font> a <font color="blue">in</font> db.InstallExecuteSequences | ||
184 | <font color="blue">join</font> ca <font color="blue">in</font> db.CustomActions <font color="blue">on</font> a.Action <font color="blue">equals</font> ca.Action | ||
185 | <font color="blue">where</font> ca.Type == CustomActionTypes.Dll | ||
186 | <font color="blue">orderby</font> a.Sequence | ||
187 | <font color="blue">select new</font> { | ||
188 | Name = a.Action, | ||
189 | Target = ca.Target, | ||
190 | Sequence = a.Sequence }; | ||
191 | |||
192 | <font color="blue">foreach</font> (<font color="blue">var</font> a <font color="blue">in</font> actions) | ||
193 | { | ||
194 | Console.WriteLine(a); | ||
195 | } | ||
196 | </font></pre> | ||
197 | |||
198 | The query above gets automatically translated to MSI SQL:</p> | ||
199 | |||
200 | <p><font face="Consolas, Courier New"> SELECT `InstallExecuteSequence`.`Action`, | ||
201 | `CustomAction`.`Target`, `InstallExecuteSequence`.`Sequence` FROM `InstallExecuteSequence`, `CustomAction` | ||
202 | WHERE `InstallExecuteSequence`.Action` = `CustomAction`.`Action` ORDER BY `InstallExecuteSequence`.`Sequence`</font></p> | ||
203 | |||
204 | <p>But the query is not executed until the <font face="Consolas, Courier New">foreach</font> | ||
205 | enumeration. Then records are fetched from the results incrementally as the enumeration progresses. | ||
206 | The objects fetched are actually of an anonymous type created there in the query with exactly | ||
207 | the desired fields. So the result of this code will be to print the Action, Target, and Sequence | ||
208 | of all Type 1 custom actions.</p> | ||
209 | |||
210 | <p>The query functionality is currently limited by the capabilities of the MSI SQL engine. For | ||
211 | example, a query can't use <font face="Consolas, Courier New">where (ca.Type & | ||
212 | CustomActionTypes.Dll) != 0</font> because the bitwise-and operator is not supported by | ||
213 | MSI SQL. The preview version of LINQ to MSI will throw an exception for cases like that, but | ||
214 | the eventual goal is to have it automatically move the data and operation outside of MSI when | ||
215 | necessary, so that any arbitrary expressions are supported in the query.</p> | ||
216 | |||
217 | <p>Note there are no MSI handles (or <font face="Consolas, Courier New">IDisposable</font>s) | ||
218 | to worry about! Handles are all managed internally and closed deterministically. Also, | ||
219 | with the entity object model for common tables, the compiler will tell you if you get a | ||
220 | column name wrong or misspelled. The entity objects even support easy inserting, updating, | ||
221 | and deleting (not shown here).</p> | ||
222 | |||
223 | <p>For more examples, see the LinqTest project in the source. More documentation | ||
224 | is being written.</p> | ||
225 | |||
226 | <p>Obviously, LINQ to MSI requires .NET Framework 3.5. Everything else | ||
227 | in DTF requires only .NET Framework 2.0.</p> | ||
228 | |||
229 | <p><font color="red">Note: The LINQ functionality in this DTF release is of preview quality only | ||
230 | and should not be used in production. While there are unit tests covering a wide | ||
231 | variety of queries, using advanced queries outside what is covered by the tests | ||
232 | is likely to result in unexpected exceptions, and retrieved data might possibly be | ||
233 | incorrect or incomplete. An updated LINQ to MSI library is in development.</font></p> | ||
234 | |||
235 | <p> </p> | ||
236 | |||
237 | </div> | ||
238 | |||
239 | <div id="footer"> | ||
240 | <p /> | ||
241 | Send comments on this topic to <a id="HT_MailLink" href="mailto:wix-users%40lists.sourceforge.net?Subject=Deployment Tools Foundation Documentation"> | ||
242 | wix-users@lists.sourceforge.net</a> | ||
243 | |||
244 | <script type="text/javascript"> | ||
245 | var HT_mailLink = document.getElementById("HT_MailLink"); | ||
246 | var HT_mailLinkText = HT_mailLink.innerHTML; | ||
247 | HT_mailLink.href += ": " + document.title; | ||
248 | HT_mailLink.innerHTML = HT_mailLinkText; | ||
249 | </script> | ||
250 | |||
251 | <p /> | ||
252 | |||
253 | </div> | ||
254 | </div> | ||
255 | |||
256 | </body> | ||
257 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/wifile.htm b/src/samples/Dtf/Documents/Guide/Content/wifile.htm deleted file mode 100644 index 20998b73..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/wifile.htm +++ /dev/null | |||
@@ -1,73 +0,0 @@ | |||
1 | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
2 | <head> | ||
3 | <title>Windows Installer Package File Manipulation Tool</title> | ||
4 | <link rel="stylesheet" type="text/css" href="../styles/presentation.css" /> | ||
5 | <link rel="stylesheet" type="text/css" href="ms-help://Hx/HxRuntime/HxLink.css" /> | ||
6 | </head> | ||
7 | |||
8 | <body> | ||
9 | |||
10 | <div id="control"> | ||
11 | <span class="productTitle">Deployment Tools Foundation</span><br /> | ||
12 | <span class="topicTitle">Windows Installer Package File Manipulation Tool</span><br /> | ||
13 | <div id="toolbar"> | ||
14 | <span id="chickenFeet"> | ||
15 | <a href="using.htm">Development Guide</a> > | ||
16 | <a href="samples.htm">Samples</a> > | ||
17 | <span class="nolink">WiFile</span> | ||
18 | </span> | ||
19 | </div> | ||
20 | </div> | ||
21 | <div id="main"> | ||
22 | <div id="header"> | ||
23 | </div> | ||
24 | <div class="summary"> | ||
25 | <p><pre><font face="Consolas, Courier New">Usage: WiFile.exe package.msi /l [filename,filename2,...] | ||
26 | Usage: WiFile.exe package.msi /x [filename,filename2,...] | ||
27 | Usage: WiFile.exe package.msi /u [filename,filename2,...] | ||
28 | |||
29 | Lists (/l), extracts (/x) or updates (/u) files in an MSI or MSM. | ||
30 | Files are extracted using their source path relative to the package. | ||
31 | Specified filenames do not include paths. | ||
32 | Filenames may be a pattern such as *.exe or file?.dll</font></pre> | ||
33 | </p> | ||
34 | <p><br/></p> | ||
35 | |||
36 | <h4>Example</h4> | ||
37 | <p>The most powerful use of WiFile.exe is to do a round-trip update of files in a | ||
38 | compressed MSI/MSM package. It works like this:<ol> | ||
39 | <li>Extract specific file(s) or all files from the package: | ||
40 | <tt>WiFile.exe package.msi /x *</tt></li> | ||
41 | <li>The files are now expanded into their directory structure. You can edit/update | ||
42 | the files however you like.</li> | ||
43 | <li>Update the package with the changed files: <tt>WiFile.exe package.msi /u *</tt> | ||
44 | This also updates the file metadata in the MSI including the file version, size, and hash.</li> | ||
45 | </ol></p> | ||
46 | <p><br/></p> | ||
47 | |||
48 | <h4>Notes</h4> | ||
49 | <ul> | ||
50 | <li><p>Also works with packages that have multiple and/or external cab(s).</p></li> | ||
51 | </ul> | ||
52 | |||
53 | <p><br/></p> | ||
54 | </div> | ||
55 | <div id="footer"> | ||
56 | <p /> | ||
57 | Send comments on this topic to <a id="HT_MailLink" href="mailto:wix-users%40lists.sourceforge.net?Subject=Deployment Tools Foundation Documentation"> | ||
58 | wix-users@lists.sourceforge.net</a> | ||
59 | |||
60 | <script type="text/javascript"> | ||
61 | var HT_mailLink = document.getElementById("HT_MailLink"); | ||
62 | var HT_mailLinkText = HT_mailLink.innerHTML; | ||
63 | HT_mailLink.href += ": " + document.title; | ||
64 | HT_mailLink.innerHTML = HT_mailLinkText; | ||
65 | </script> | ||
66 | |||
67 | <p /> | ||
68 | |||
69 | </div> | ||
70 | </div> | ||
71 | |||
72 | </body> | ||
73 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/Content/writingcas.htm b/src/samples/Dtf/Documents/Guide/Content/writingcas.htm deleted file mode 100644 index 6beccf5f..00000000 --- a/src/samples/Dtf/Documents/Guide/Content/writingcas.htm +++ /dev/null | |||
@@ -1,114 +0,0 @@ | |||
1 | <html xmlns="http://www.w3.org/1999/xhtml"> | ||
2 | <head> | ||
3 | <title>Writing Managed Custom Actions</title> | ||
4 | <link rel="stylesheet" type="text/css" href="../styles/presentation.css" /> | ||
5 | <link rel="stylesheet" type="text/css" href="ms-help://Hx/HxRuntime/HxLink.css" /> | ||
6 | </head> | ||
7 | |||
8 | <body> | ||
9 | |||
10 | <div id="control"> | ||
11 | <span class="productTitle">Deployment Tools Foundation</span><br /> | ||
12 | <span class="topicTitle">Writing Managed Custom Actions</span><br /> | ||
13 | <div id="toolbar"> | ||
14 | <span id="chickenFeet"> | ||
15 | <a href="using.htm">Development Guide</a> > | ||
16 | <a href="managedcas.htm">Managed CAs</a> > | ||
17 | <span class="nolink">Writing CAs</span> | ||
18 | </span> | ||
19 | </div> | ||
20 | </div> | ||
21 | <div id="main"> | ||
22 | <div id="header"> | ||
23 | </div> | ||
24 | <div class="summary"> | ||
25 | <p><b>Caveats</b></p> | ||
26 | <p>Before choosing to write a custom action in managed code instead of | ||
27 | traditional native C++ code, you should carefully consider the following:</p> | ||
28 | <ul> | ||
29 | <li><p>Obviously, it introduces a dependency on the .NET Framework. Your | ||
30 | MSI package should probably have a LaunchCondition to check for the presence | ||
31 | of the correct version of the .NET Framework before anything else happens.</p></li> | ||
32 | <li><p>If the custom action runs at uninstall time, then even the uninstall of | ||
33 | your product may fail if the .NET Framework is not present. This means a | ||
34 | user could run into a problem if they uninstall the .NET Framework before | ||
35 | your product.</p></li> | ||
36 | <li><p>A managed custom action should be configured to run against a specific | ||
37 | version of the .NET Framework, and that version should match the version your | ||
38 | actual product runs against. Allowing the version to "float" to the latest | ||
39 | installed .NET Framework is likely to lead to compatibility problems with | ||
40 | future versions. The .NET Framework provides side-by-side functionality for | ||
41 | good reason -- use it.</p></li> | ||
42 | |||
43 | </ul> | ||
44 | <p><br/></p> | ||
45 | <p><b>How To</b></p> | ||
46 | <ul> | ||
47 | <li><p>A custom action function needs to be declared as | ||
48 | <tt>public static</tt> (aka <tt>Public Shared</tt> in VB.NET). It takes one parameter which is | ||
49 | a <a href="DTFAPI.chm::/html/T_Microsoft_Deployment_WindowsInstaller_Session.htm">Session</a> object, and returns a | ||
50 | <a href="DTFAPI.chm::/html/T_Microsoft_Deployment_WindowsInstaller_ActionResult.htm">ActionResult</a> enumeration.</p> | ||
51 | <pre><font face="Consolas, Courier New"> [CustomAction] | ||
52 | <font color=blue>public</font> <font color=blue>static</font> ActionResult MyCustomAction(Session session)</font></pre><br /> | ||
53 | <li><p>The function must have a | ||
54 | <a href="DTFAPI.chm::/html/T_Microsoft_Deployment_WindowsInstaller_CustomActionAttribute.htm" | ||
55 | >CustomActionAttribute</a>, which enables it to be | ||
56 | linked to a proxy function. The attribute can take an optional | ||
57 | "name" parameter, which is the name of the entrypoint | ||
58 | that is exported from the custom action DLL.</p> | ||
59 | <li><p>Fill in MSI CustomAction table entries just like you | ||
60 | would for a normal type 1 native-DLL CA. Managed CAs can also work just | ||
61 | as well in deferred, rollback, and commit modes.</p> | ||
62 | <li><p>If the custom action function throws any kind of | ||
63 | Exception that isn't handled internally, then it will be caught by the proxy | ||
64 | function. The Exception message and stack trace will be printed to the | ||
65 | MSI log if logging is enabled, and the CA will return a failure code.</p> | ||
66 | <li><p>To be technically correct, any MSI handles obtained should be | ||
67 | closed before a custom action function exits -- otherwise a warning | ||
68 | gets printed to the log. The handle classes in the managed library | ||
69 | (<a href="DTFAPI.chm::/html/T_Microsoft_Deployment_WindowsInstaller_Database.htm">Database</a>, | ||
70 | <a href="DTFAPI.chm::/html/T_Microsoft_Deployment_WindowsInstaller_View.htm">View</a>, | ||
71 | <a href="DTFAPI.chm::/html/T_Microsoft_Deployment_WindowsInstaller_Record.htm">Record</a>, | ||
72 | <a href="DTFAPI.chm::/html/T_Microsoft_Deployment_WindowsInstaller_SummaryInfo.htm">SummaryInfo</a>) | ||
73 | all implement the IDisposable interface, | ||
74 | which makes them easily managed with C#'s <tt>using</tt> | ||
75 | statement. Alternatively, they can be closed in a finally block. | ||
76 | As a general rule, <i>methods</i> return new handle objects that should be | ||
77 | managed and closed by the user code, while <i>properties</i> only return a reference | ||
78 | to a prexisting handle object.</p></li> | ||
79 | <li><p>Don't forget to use a <a href="caconfig.htm">CustomAction.config</a> file to | ||
80 | specify what version of the .NET Framework the custom action should run against.</p></li> | ||
81 | </ul> | ||
82 | |||
83 | <p><br/></p> | ||
84 | <p><b>See also:</b></p> | ||
85 | <ul> | ||
86 | <li><a href="samplecas.htm">Sample C# Custom Actions</a></li> | ||
87 | <li><a href="caconfig.htm">Specifying the Runtime Version</a></li> | ||
88 | <li><a href="databases.htm">Working with MSI Databases</a></li> | ||
89 | <li><a href="buildingcas.htm">Building Managed Custom Actions</a></li> | ||
90 | <li><a href="debuggingcas.htm">Debugging Managed Custom Actions</a></li> | ||
91 | </ul> | ||
92 | <p><br/></p> | ||
93 | |||
94 | </div> | ||
95 | |||
96 | <div id="footer"> | ||
97 | <p /> | ||
98 | Send comments on this topic to <a id="HT_MailLink" href="mailto:wix-users%40lists.sourceforge.net?Subject=Deployment Tools Foundation Documentation"> | ||
99 | wix-users@lists.sourceforge.net</a> | ||
100 | |||
101 | <script type="text/javascript"> | ||
102 | var HT_mailLink = document.getElementById("HT_MailLink"); | ||
103 | var HT_mailLinkText = HT_mailLink.innerHTML; | ||
104 | HT_mailLink.href += ": " + document.title; | ||
105 | HT_mailLink.innerHTML = HT_mailLinkText; | ||
106 | </script> | ||
107 | |||
108 | <p /> | ||
109 | |||
110 | </div> | ||
111 | </div> | ||
112 | |||
113 | </body> | ||
114 | </html> | ||
diff --git a/src/samples/Dtf/Documents/Guide/DTF.hhc b/src/samples/Dtf/Documents/Guide/DTF.hhc deleted file mode 100644 index bf43e447..00000000 --- a/src/samples/Dtf/Documents/Guide/DTF.hhc +++ /dev/null | |||
@@ -1,132 +0,0 @@ | |||
1 | <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> | ||
2 | <HTML> | ||
3 | <HEAD> | ||
4 | <!-- Sitemap 1.0 --> | ||
5 | </HEAD><BODY> | ||
6 | <UL> | ||
7 | <LI><OBJECT type="text/sitemap"> | ||
8 | <param name="Name" value="Deployment Tools Foundation Overview"> | ||
9 | <param name="Local" value="Content\about.htm"> | ||
10 | </OBJECT> | ||
11 | <UL> | ||
12 | <LI><OBJECT type="text/sitemap"> | ||
13 | <param name="Name" value="What's New?"> | ||
14 | <param name="Local" value="Content\whatsnew.htm"> | ||
15 | </OBJECT> | ||
16 | </LI> | ||
17 | <LI><OBJECT type="text/sitemap"> | ||
18 | <param name="Name" value="Change History"> | ||
19 | <param name="Local" value="Content\history.htm"> | ||
20 | </OBJECT> | ||
21 | </LI> | ||
22 | <LI><OBJECT type="text/sitemap"> | ||
23 | <param name="Name" value="Dependencies"> | ||
24 | <param name="Local" value="Content\dependencies.htm"> | ||
25 | </OBJECT> | ||
26 | </LI> | ||
27 | <LI><OBJECT type="text/sitemap"> | ||
28 | <param name="Name" value="Support/Bugs"> | ||
29 | <param name="Local" value="Content\support.htm"> | ||
30 | </OBJECT> | ||
31 | </LI> | ||
32 | </UL> | ||
33 | </LI> | ||
34 | <LI><OBJECT type="text/sitemap"> | ||
35 | <param name="Name" value="Deployment Tools Foundation Development Guide"> | ||
36 | <param name="Local" value="Content\using.htm"> | ||
37 | </OBJECT> | ||
38 | <UL> | ||
39 | <LI><OBJECT type="text/sitemap"> | ||
40 | <param name="Name" value="Managed Custom Actions"> | ||
41 | <param name="Local" value="Content\managedcas.htm"> | ||
42 | </OBJECT> | ||
43 | <UL> | ||
44 | <LI><OBJECT type="text/sitemap"> | ||
45 | <param name="Name" value="Writing Managed Custom Actions"> | ||
46 | <param name="Local" value="Content\writingcas.htm"> | ||
47 | </OBJECT> | ||
48 | <UL> | ||
49 | <LI><OBJECT type="text/sitemap"> | ||
50 | <param name="Name" value="Specifying the Runtime Version"> | ||
51 | <param name="Local" value="Content\caconfig.htm"> | ||
52 | </OBJECT> | ||
53 | </LI> | ||
54 | <LI><OBJECT type="text/sitemap"> | ||
55 | <param name="Name" value="Sample C# Custom Actions"> | ||
56 | <param name="Local" value="Content\samplecas.htm"> | ||
57 | </OBJECT> | ||
58 | </LI> | ||
59 | </UL> | ||
60 | </LI> | ||
61 | <LI><OBJECT type="text/sitemap"> | ||
62 | <param name="Name" value="Building Managed Custom Actions"> | ||
63 | <param name="Local" value="Content\buildingcas.htm"> | ||
64 | </OBJECT> | ||
65 | </LI> | ||
66 | <LI><OBJECT type="text/sitemap"> | ||
67 | <param name="Name" value="Debugging Managed Custom Actions"> | ||
68 | <param name="Local" value="Content\debuggingcas.htm"> | ||
69 | </OBJECT> | ||
70 | </LI> | ||
71 | <LI><OBJECT type="text/sitemap"> | ||
72 | <param name="Name" value="InstallUtil Notes"> | ||
73 | <param name="Local" value="Content\installutil.htm"> | ||
74 | </OBJECT> | ||
75 | </LI> | ||
76 | </UL> | ||
77 | </LI> | ||
78 | <LI><OBJECT type="text/sitemap"> | ||
79 | <param name="Name" value="Working with MSI Databases"> | ||
80 | <param name="Local" value="Content\databases.htm"> | ||
81 | </OBJECT> | ||
82 | </LI> | ||
83 | <LI><OBJECT type="text/sitemap"> | ||
84 | <param name="Name" value="Working with Cabinet Files"> | ||
85 | <param name="Local" value="Content\cabs.htm"> | ||
86 | </OBJECT> | ||
87 | </LI> | ||
88 | <LI><OBJECT type="text/sitemap"> | ||
89 | <param name="Name" value="Working with Install Packages"> | ||
90 | <param name="Local" value="Content\packages.htm"> | ||
91 | </OBJECT> | ||
92 | </LI> | ||
93 | <LI><OBJECT type="text/sitemap"> | ||
94 | <param name="Name" value="Sample Applications"> | ||
95 | <param name="Local" value="Content\samples.htm"> | ||
96 | </OBJECT> | ||
97 | <UL> | ||
98 | <LI><OBJECT type="text/sitemap"> | ||
99 | <param name="Name" value="MSI Inventory"> | ||
100 | <param name="Local" value="Content\inventory.htm"> | ||
101 | </OBJECT> | ||
102 | </LI> | ||
103 | <LI><OBJECT type="text/sitemap"> | ||
104 | <param name="Name" value="WiFile"> | ||
105 | <param name="Local" value="Content\wifile.htm"> | ||
106 | </OBJECT> | ||
107 | </LI> | ||
108 | <LI><OBJECT type="text/sitemap"> | ||
109 | <param name="Name" value="XPack"> | ||
110 | <param name="Local" value="Content\cabpack.htm"> | ||
111 | </OBJECT> | ||
112 | </LI> | ||
113 | <LI><OBJECT type="text/sitemap"> | ||
114 | <param name="Name" value="DDiff"> | ||
115 | <param name="Local" value="Content\powerdiff.htm"> | ||
116 | </OBJECT> | ||
117 | </LI> | ||
118 | </UL> | ||
119 | </LI> | ||
120 | </UL> | ||
121 | </LI> | ||
122 | <LI><OBJECT type="text/sitemap"> | ||
123 | <param name="Name" value="Deployment Tools Foundation Reference"> | ||
124 | <param name="Local" value="DTFAPI.chm::/html/R_Project.htm"> | ||
125 | </OBJECT> | ||
126 | <OBJECT type="text/sitemap"> | ||
127 | <param name="Merge" value="DTFAPI.chm::/DTFAPI.hhc"> | ||
128 | </OBJECT> | ||
129 | </LI> | ||
130 | </UL> | ||
131 | </BODY> | ||
132 | </HTML> | ||
diff --git a/src/samples/Dtf/Documents/Guide/DTF.hhk b/src/samples/Dtf/Documents/Guide/DTF.hhk deleted file mode 100644 index bc6e49b3..00000000 --- a/src/samples/Dtf/Documents/Guide/DTF.hhk +++ /dev/null | |||
@@ -1,126 +0,0 @@ | |||
1 | <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> | ||
2 | <HTML> | ||
3 | <HEAD> | ||
4 | <!-- Sitemap 1.0 --> | ||
5 | </HEAD><BODY> | ||
6 | <UL> | ||
7 | <LI><OBJECT type="text/sitemap"> | ||
8 | <param name="Name" value="Deployment Tools Foundation Overview"> | ||
9 | <param name="Local" value="Content\about.htm"> | ||
10 | </OBJECT> | ||
11 | </LI> | ||
12 | <LI><OBJECT type="text/sitemap"> | ||
13 | <param name="Name" value="What's New?"> | ||
14 | <param name="Local" value="Content\whatsnew.htm"> | ||
15 | </OBJECT> | ||
16 | </LI> | ||
17 | <LI><OBJECT type="text/sitemap"> | ||
18 | <param name="Name" value="Dependencies"> | ||
19 | <param name="Local" value="Content\dependencies.htm"> | ||
20 | </OBJECT> | ||
21 | </LI> | ||
22 | <LI><OBJECT type="text/sitemap"> | ||
23 | <param name="Name" value="Sample Applications"> | ||
24 | <param name="Local" value="Content\samples.htm"> | ||
25 | </OBJECT> | ||
26 | </LI> | ||
27 | <LI><OBJECT type="text/sitemap"> | ||
28 | <param name="Name" value="Inventory Sample Application"> | ||
29 | <param name="Local" value="Content\inventory.htm"> | ||
30 | </OBJECT> | ||
31 | </LI> | ||
32 | <LI><OBJECT type="text/sitemap"> | ||
33 | <param name="Name" value="WiFile Sample Tool"> | ||
34 | <param name="Local" value="Content\wifile.htm"> | ||
35 | </OBJECT> | ||
36 | </LI> | ||
37 | <LI><OBJECT type="text/sitemap"> | ||
38 | <param name="Name" value="CabPack Sample Tool"> | ||
39 | <param name="Local" value="Content\cabpack.htm"> | ||
40 | </OBJECT> | ||
41 | </LI> | ||
42 | <LI><OBJECT type="text/sitemap"> | ||
43 | <param name="Name" value="DDiff Sample Tool"> | ||
44 | <param name="Local" value="Content\powerdiff.htm"> | ||
45 | </OBJECT> | ||
46 | </LI> | ||
47 | <LI><OBJECT type="text/sitemap"> | ||
48 | <param name="Name" value="Support/Bugs"> | ||
49 | <param name="Local" value="Content\support.htm"> | ||
50 | </OBJECT> | ||
51 | </LI> | ||
52 | <LI><OBJECT type="text/sitemap"> | ||
53 | <param name="Name" value="Change History"> | ||
54 | <param name="Local" value="Content\history.htm"> | ||
55 | </OBJECT> | ||
56 | </LI> | ||
57 | <LI><OBJECT type="text/sitemap"> | ||
58 | <param name="Name" value="Using Deployment Tools Foundation"> | ||
59 | <param name="Local" value="Content\using.htm"> | ||
60 | </OBJECT> | ||
61 | </LI> | ||
62 | <LI><OBJECT type="text/sitemap"> | ||
63 | <param name="Name" value="Custom Actions"> | ||
64 | <param name="Local" value="Content\managedcas.htm"> | ||
65 | </OBJECT> | ||
66 | <UL> | ||
67 | <LI><OBJECT type="text/sitemap"> | ||
68 | <param name="Name" value="Writing"> | ||
69 | <param name="Local" value="Content\writingcas.htm"> | ||
70 | </OBJECT> | ||
71 | </LI> | ||
72 | <LI> | ||
73 | <OBJECT type="text/sitemap"> | ||
74 | <param name="Name" value="CustomAction.config"> | ||
75 | <param name="Local" value="Content\caconfig.htm"> | ||
76 | </OBJECT> | ||
77 | </LI> | ||
78 | <LI><OBJECT type="text/sitemap"> | ||
79 | <param name="Name" value="Building"> | ||
80 | <param name="Local" value="Content\buildingcas.htm"> | ||
81 | </OBJECT> | ||
82 | </LI> | ||
83 | <LI><OBJECT type="text/sitemap"> | ||
84 | <param name="Name" value="Debugging"> | ||
85 | <param name="Local" value="Content\debuggingcas.htm"> | ||
86 | </OBJECT> | ||
87 | </LI> | ||
88 | <LI><OBJECT type="text/sitemap"> | ||
89 | <param name="Name" value="Samples"> | ||
90 | <param name="Local" value="Content\samplecas.htm"> | ||
91 | </OBJECT> | ||
92 | </LI> | ||
93 | </UL> | ||
94 | </LI> | ||
95 | <LI><OBJECT type="text/sitemap"> | ||
96 | <param name="Name" value="InstallUtil"> | ||
97 | <param name="Local" value="Content\installutil.htm"> | ||
98 | </OBJECT> | ||
99 | </LI> | ||
100 | <LI><OBJECT type="text/sitemap"> | ||
101 | <param name="Name" value="CustomAction.config file"> | ||
102 | <param name="Local" value="Content\caconfig.htm"> | ||
103 | </OBJECT> | ||
104 | </LI> | ||
105 | <LI><OBJECT type="text/sitemap"> | ||
106 | <param name="Name" value="Sample C# Custom Actions"> | ||
107 | <param name="Local" value="Content\samplecas.htm"> | ||
108 | </OBJECT> | ||
109 | </LI> | ||
110 | <LI><OBJECT type="text/sitemap"> | ||
111 | <param name="Name" value="Databases, Working with"> | ||
112 | <param name="Local" value="Content\databases.htm"> | ||
113 | </OBJECT> | ||
114 | </LI> | ||
115 | <LI><OBJECT type="text/sitemap"> | ||
116 | <param name="Name" value="Cabinets, Working with"> | ||
117 | <param name="Local" value="Content\cabs.htm"> | ||
118 | </OBJECT> | ||
119 | </LI> | ||
120 | <LI><OBJECT type="text/sitemap"> | ||
121 | <param name="Name" value="Packages, Working with"> | ||
122 | <param name="Local" value="Content\packages.htm"> | ||
123 | </OBJECT> | ||
124 | </LI> | ||
125 | </UL> | ||
126 | </BODY></HTML> | ||
diff --git a/src/samples/Dtf/Documents/Guide/DTF.hhp b/src/samples/Dtf/Documents/Guide/DTF.hhp deleted file mode 100644 index e9b8ad90..00000000 --- a/src/samples/Dtf/Documents/Guide/DTF.hhp +++ /dev/null | |||
@@ -1,49 +0,0 @@ | |||
1 | [OPTIONS] | ||
2 | Auto Index=Yes | ||
3 | Compatibility=1.1 or later | ||
4 | Compiled file=DTF.chm | ||
5 | Contents file=DTF.hhc | ||
6 | Default Window=DTF | ||
7 | Default topic=Content\about.htm | ||
8 | Display compile progress=Yes | ||
9 | Error log file=DTFhelp.log | ||
10 | Full-text search=Yes | ||
11 | Index file=DTF.hhk | ||
12 | Language=0x409 English (United States) | ||
13 | Title=Deployment Tools Foundation | ||
14 | |||
15 | [WINDOWS] | ||
16 | DTF="Deployment Tools Foundation","DTF.hhc","DTF.hhk","Content\about.htm","Content\about.htm",,,,,0x22520,,0x384e,[143,72,937,601],,,,,,,0 | ||
17 | |||
18 | |||
19 | [FILES] | ||
20 | styles\presentation.css | ||
21 | Content\about.htm | ||
22 | Content\whatsnew.htm | ||
23 | Content\dependencies.htm | ||
24 | Content\using.htm | ||
25 | DTF.hhc | ||
26 | DTF.hhk | ||
27 | Content\samples.htm | ||
28 | Content\support.htm | ||
29 | Content\history.htm | ||
30 | Content\inventory.htm | ||
31 | Content\wifile.htm | ||
32 | Content\cabpack.htm | ||
33 | Content\powerdiff.htm | ||
34 | Content\cabs.htm | ||
35 | Content\databases.htm | ||
36 | Content\packages.htm | ||
37 | Content\managedcas.htm | ||
38 | Content\samplecas.htm | ||
39 | Content\writingcas.htm | ||
40 | Content\buildingcas.htm | ||
41 | Content\debuggingcas.htm | ||
42 | Content\caproxy.htm | ||
43 | Content\caconfig.htm | ||
44 | Content\installutil.htm | ||
45 | |||
46 | [MERGE FILES] | ||
47 | DTFAPI.chm | ||
48 | |||
49 | [INFOTYPES] | ||
diff --git a/src/samples/Dtf/Documents/Guide/dtfguide.helpproj b/src/samples/Dtf/Documents/Guide/dtfguide.helpproj deleted file mode 100644 index 4df2765d..00000000 --- a/src/samples/Dtf/Documents/Guide/dtfguide.helpproj +++ /dev/null | |||
@@ -1,29 +0,0 @@ | |||
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. --> | ||
3 | |||
4 | |||
5 | <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
6 | <PropertyGroup> | ||
7 | <ProjectGuid>{3CFD8620-B41C-470C-ABEF-9D38076A2A8D}</ProjectGuid> | ||
8 | <TargetName>dtf</TargetName> | ||
9 | </PropertyGroup> | ||
10 | |||
11 | <ItemGroup> | ||
12 | <HelpProjectFile Include="dtf.hhp" /> | ||
13 | <HelpProjectContent Include="DTF.hhc" /> | ||
14 | <HelpProjectContent Include="DTF.hhk" /> | ||
15 | <HelpProjectContent Include="Content\*.*" /> | ||
16 | <HelpProjectContent Include="styles\*.*" /> | ||
17 | <HelpProjectContent Include="DTFAPI.chm"> | ||
18 | <SourcePath>$(OutputPath)DTFAPI.chm</SourcePath> | ||
19 | </HelpProjectContent> | ||
20 | </ItemGroup> | ||
21 | |||
22 | <ItemGroup> | ||
23 | <ProjectReference Include="..\Reference\dtfref.shfbproj"> | ||
24 | <ReferenceOutputAssembly>false</ReferenceOutputAssembly> | ||
25 | </ProjectReference> | ||
26 | </ItemGroup> | ||
27 | |||
28 | <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), wix.proj))\tools\WixBuild.targets" /> | ||
29 | </Project> | ||
diff --git a/src/samples/Dtf/Documents/Guide/styles/presentation.css b/src/samples/Dtf/Documents/Guide/styles/presentation.css deleted file mode 100644 index b71c8582..00000000 --- a/src/samples/Dtf/Documents/Guide/styles/presentation.css +++ /dev/null | |||
@@ -1,394 +0,0 @@ | |||
1 | |||
2 | /* page style */ | ||
3 | |||
4 | body { | ||
5 | margin: 0; | ||
6 | background-color: #FFFFFF; | ||
7 | padding: 0; | ||
8 | font-size: 80%; | ||
9 | font-family: verdana, sans-serif; | ||
10 | color: #000000; | ||
11 | } | ||
12 | |||
13 | table { | ||
14 | /* this is a trick to force tables to inherit the body font size */ | ||
15 | font-size: 100%; | ||
16 | } | ||
17 | |||
18 | /* non-scrolling (control) region style */ | ||
19 | |||
20 | div#control { | ||
21 | margin: 0; | ||
22 | background-color: #D4DFFF; | ||
23 | padding: 4px; | ||
24 | width: 100%; | ||
25 | border-bottom-color: #C8CDDE; | ||
26 | border-bottom-style: solid; | ||
27 | border-bottom-width: 1; | ||
28 | } | ||
29 | |||
30 | span.productTitle { | ||
31 | font-size: 80%; | ||
32 | } | ||
33 | |||
34 | span.topicTitle { | ||
35 | font-size: 140%; | ||
36 | font-weight: bold; | ||
37 | color: #003399; | ||
38 | } | ||
39 | |||
40 | span#chickenFeet { | ||
41 | float: left; | ||
42 | } | ||
43 | |||
44 | span#languageFilter { | ||
45 | float: right; | ||
46 | } | ||
47 | |||
48 | /* scrolling (content) region style */ | ||
49 | |||
50 | div#main { | ||
51 | margin: 0; | ||
52 | padding: 1em; | ||
53 | width: 100%; | ||
54 | clear: both; | ||
55 | } | ||
56 | |||
57 | /* sections */ | ||
58 | |||
59 | div#header { | ||
60 | font-size: 70%; | ||
61 | color: #666666; | ||
62 | margin-bottom: 0.5em; | ||
63 | } | ||
64 | |||
65 | div.section { | ||
66 | margin-bottom: 1em; | ||
67 | } | ||
68 | |||
69 | div.sectionTitle { | ||
70 | display: inline; | ||
71 | font-size: 120%; | ||
72 | font-weight: bold; | ||
73 | color: #003399; | ||
74 | } | ||
75 | |||
76 | div.sectionContent { | ||
77 | margin-top: 0.2em; | ||
78 | } | ||
79 | |||
80 | span.subsectionTitle { | ||
81 | font-weight: bold; | ||
82 | } | ||
83 | |||
84 | div#footer { | ||
85 | margin-top: 1em; | ||
86 | border-top: thin solid #003399; | ||
87 | padding-top: 0.5em; | ||
88 | } | ||
89 | |||
90 | /* authored content (block) */ | ||
91 | |||
92 | p { | ||
93 | margin-top: 0; | ||
94 | margin-bottom: 1em; | ||
95 | } | ||
96 | |||
97 | dl { | ||
98 | margin-top: 0; | ||
99 | margin-bottom: 1em; | ||
100 | } | ||
101 | |||
102 | div.code { | ||
103 | clear: both; | ||
104 | width: 100%; | ||
105 | background: #F7F7FF; | ||
106 | padding: 0.4em; | ||
107 | font-family: "Andale Mono"; | ||
108 | /* font-family: "Courier New"; */ | ||
109 | /* font-family: "This is not a monospace font", monospace; */ | ||
110 | font-size: inherit; | ||
111 | margin-bottom: 1em; | ||
112 | } | ||
113 | |||
114 | pre { | ||
115 | margin: 0; | ||
116 | padding: 0; | ||
117 | } | ||
118 | |||
119 | table.authoredTable { | ||
120 | table-layout: fixed; | ||
121 | width: 100%; | ||
122 | margin-bottom: 1em; | ||
123 | } | ||
124 | |||
125 | table.authoredTable th { | ||
126 | border-bottom-color: #C8CDDE; | ||
127 | border-bottom-style: solid; | ||
128 | border-bottom-width: 1; | ||
129 | background: #EFEFF7; | ||
130 | padding: 0.2em; | ||
131 | text-align: left; | ||
132 | color: #000066; | ||
133 | font-weight: bold; | ||
134 | } | ||
135 | |||
136 | table.authoredTable td { | ||
137 | border-bottom-style: solid; | ||
138 | border-bottom-color: #C8CDDE; | ||
139 | border-bottom-width: 1px; | ||
140 | background: #F7F7FF; | ||
141 | padding: 0.2em; | ||
142 | vertical-align: top; | ||
143 | } | ||
144 | |||
145 | div.alert { | ||
146 | border: 1px solid #C8CDDE; | ||
147 | background: #F7F7FF; | ||
148 | } | ||
149 | |||
150 | div.media { | ||
151 | text-align: center; | ||
152 | margin-bottom: 1em; | ||
153 | } | ||
154 | |||
155 | |||
156 | /* authored content (inline) */ | ||
157 | |||
158 | span.keyword { | ||
159 | font-weight: bold; | ||
160 | } | ||
161 | |||
162 | span.code { | ||
163 | font-family: "Andale Mono", "Courier New", Courier, monospace; | ||
164 | } | ||
165 | |||
166 | /* auto-generated controls */ | ||
167 | |||
168 | div.langTabs { | ||
169 | width: 100%; | ||
170 | } | ||
171 | |||
172 | div.langTab { | ||
173 | float: left; | ||
174 | width: 16%; | ||
175 | border-top: 1px solid #C8CDDE; | ||
176 | border-left: 1px solid #C8CDDE; | ||
177 | border-right: 1px solid #C8CDDE; | ||
178 | background: #F7F7FF; | ||
179 | padding: 0.2em; | ||
180 | text-align: left; | ||
181 | color: #000066; | ||
182 | font-weight: normal; | ||
183 | } | ||
184 | |||
185 | div.activeLangTab { | ||
186 | float: left; | ||
187 | width: 16%; | ||
188 | border-top: 1px solid #C8CDDE; | ||
189 | border-left: 1px solid #C8CDDE; | ||
190 | border-right: 1px solid #C8CDDE; | ||
191 | background: #EFEFF7; | ||
192 | padding: 0.2em; | ||
193 | text-align: left; | ||
194 | color: #000066; | ||
195 | font-weight: bold; | ||
196 | } | ||
197 | |||
198 | table.members { | ||
199 | table-layout: fixed; | ||
200 | width: 100%; | ||
201 | } | ||
202 | |||
203 | table.members th.iconColumn { | ||
204 | width: 60px; | ||
205 | } | ||
206 | |||
207 | table.members th.nameColumn { | ||
208 | width: 33%; | ||
209 | } | ||
210 | |||
211 | table.members th.descriptionColumn { | ||
212 | width: 66%; | ||
213 | } | ||
214 | |||
215 | table.members th { | ||
216 | border-bottom-color: #C8CDDE; | ||
217 | border-bottom-style: solid; | ||
218 | border-bottom-width: 1; | ||
219 | background: #EFEFF7; | ||
220 | padding: 0.2em; | ||
221 | text-align: left; | ||
222 | color: #000066; | ||
223 | font-weight: bold; | ||
224 | } | ||
225 | |||
226 | table.members td { | ||
227 | border-bottom-style: solid; | ||
228 | border-bottom-color: #C8CDDE; | ||
229 | border-bottom-width: 1px; | ||
230 | background: #F7F7FF; | ||
231 | padding: 0.2em; | ||
232 | vertical-align: top; | ||
233 | overflow: hidden; | ||
234 | } | ||
235 | |||
236 | table.exceptions { | ||
237 | table-layout: fixed; | ||
238 | width: 100%; | ||
239 | } | ||
240 | |||
241 | |||
242 | table.exceptions th.exceptionNameColumn { | ||
243 | width: 33%; | ||
244 | } | ||
245 | |||
246 | table.exceptions th.exceptionConditionColumn { | ||
247 | width: 66%; | ||
248 | } | ||
249 | |||
250 | table.exceptions th { | ||
251 | border-bottom-color: #C8CDDE; | ||
252 | border-bottom-style: solid; | ||
253 | border-bottom-width: 1; | ||
254 | background: #EFEFF7; | ||
255 | padding: 0.2em; | ||
256 | text-align: left; | ||
257 | color: #000066; | ||
258 | font-weight: bold; | ||
259 | } | ||
260 | |||
261 | table.exceptions td { | ||
262 | border-bottom-style: solid; | ||
263 | border-bottom-color: #C8CDDE; | ||
264 | border-bottom-width: 1px; | ||
265 | background: #F7F7FF; | ||
266 | padding: 0.2em; | ||
267 | vertical-align: top; | ||
268 | } | ||
269 | |||
270 | table.permissions { | ||
271 | table-layout: fixed; | ||
272 | width: 100%; | ||
273 | } | ||
274 | |||
275 | |||
276 | table.permissions th.permissionNameColumn { | ||
277 | width: 33%; | ||
278 | } | ||
279 | |||
280 | table.permissions th.permissionConditionColumn { | ||
281 | width: 66%; | ||
282 | } | ||
283 | |||
284 | table.permissions th { | ||
285 | border-bottom-color: #C8CDDE; | ||
286 | border-bottom-style: solid; | ||
287 | border-bottom-width: 1; | ||
288 | background: #EFEFF7; | ||
289 | padding: 0.2em; | ||
290 | text-align: left; | ||
291 | color: #000066; | ||
292 | font-weight: bold; | ||
293 | } | ||
294 | |||
295 | table.permissions td { | ||
296 | border-bottom-style: solid; | ||
297 | border-bottom-color: #C8CDDE; | ||
298 | border-bottom-width: 1px; | ||
299 | background: #F7F7FF; | ||
300 | padding: 0.2em; | ||
301 | vertical-align: top; | ||
302 | } | ||
303 | |||
304 | span.obsolete { | ||
305 | color: red; | ||
306 | } | ||
307 | |||
308 | span.cs { | ||
309 | display: inline; | ||
310 | } | ||
311 | |||
312 | span.vb { | ||
313 | display: none; | ||
314 | } | ||
315 | |||
316 | span.cpp { | ||
317 | display: none; | ||
318 | } | ||
319 | /* syntax styling */ | ||
320 | |||
321 | div.code span.identifier { | ||
322 | font-size: 120%; | ||
323 | font-weight: bold; | ||
324 | } | ||
325 | |||
326 | div.code span.keyword { | ||
327 | color: green; | ||
328 | } | ||
329 | |||
330 | div.code span.parameter { | ||
331 | font-style: italic; | ||
332 | color: purple; | ||
333 | } | ||
334 | |||
335 | div.code span.literal { | ||
336 | color: purple; | ||
337 | } | ||
338 | |||
339 | div.code span.comment { | ||
340 | color: red; | ||
341 | } | ||
342 | |||
343 | span.foreignPhrase { | ||
344 | font-style: italic; | ||
345 | } | ||
346 | |||
347 | span.placeholder { | ||
348 | font-style: italic; | ||
349 | } | ||
350 | |||
351 | a { | ||
352 | color: blue; | ||
353 | font-weight: bold; | ||
354 | text-decoration: none; | ||
355 | } | ||
356 | |||
357 | MSHelp\:link { | ||
358 | color: blue; | ||
359 | font-weight: bold; | ||
360 | hoverColor: #3366ff; | ||
361 | } | ||
362 | |||
363 | span.nolink { | ||
364 | font-weight: bold; | ||
365 | } | ||
366 | |||
367 | table.filter { | ||
368 | table-layout: fixed; | ||
369 | } | ||
370 | |||
371 | tr.tabs td.tab { | ||
372 | width: 10em; | ||
373 | background: #F7F7FF; | ||
374 | padding: 0.2em; | ||
375 | text-align: left; | ||
376 | color: #000066; | ||
377 | font-weight: normal; | ||
378 | overflow: hidden; | ||
379 | cursor: pointer; | ||
380 | } | ||
381 | |||
382 | tr.tabs td.activeTab { | ||
383 | width: 10em; | ||
384 | background: #EFEFF7; | ||
385 | padding: 0.2em; | ||
386 | text-align: left; | ||
387 | color: #000066; | ||
388 | font-weight: bold; | ||
389 | overflow: hidden; | ||
390 | } | ||
391 | |||
392 | td.line { | ||
393 | background: #EFEFF7; | ||
394 | } | ||