<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8359995441047908663</id><updated>2012-01-26T15:19:50.771+01:00</updated><category term='c#'/><category term='.net'/><category term='altiris'/><category term='class'/><title type='text'>Wout's blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://woutsblog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://woutsblog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Wouter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8359995441047908663.post-2494151415381260925</id><published>2011-10-07T12:26:00.001+02:00</published><updated>2011-10-07T12:28:00.002+02:00</updated><title type='text'>Visual Studio Extension: JQuery Google CDN</title><content type='html'>I created a little item template for simply adding JQuery support to your SharePoint project.&lt;br /&gt;&lt;br /&gt;More info to come...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8359995441047908663-2494151415381260925?l=woutsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://woutsblog.blogspot.com/feeds/2494151415381260925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8359995441047908663&amp;postID=2494151415381260925' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default/2494151415381260925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default/2494151415381260925'/><link rel='alternate' type='text/html' href='http://woutsblog.blogspot.com/2011/10/visual-studio-extension-jquery-google.html' title='Visual Studio Extension: JQuery Google CDN'/><author><name>Wouter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8359995441047908663.post-854753580202367652</id><published>2010-12-28T00:00:00.007+01:00</published><updated>2011-01-28T14:50:35.632+01:00</updated><title type='text'>APK Edit</title><content type='html'>Ever wanted to simply change an icon on your Android phone and found yourself lost in the endless lists of forum posts saying: you have to change heaven and earth to do this...&lt;br /&gt;NOT ANYMORE!!!!&lt;br /&gt;&lt;br /&gt;APK Edit is born!&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_IAqGaYSthkg/TULJVkgIbOI/AAAAAAAAALU/dlqArkeK6dg/s1600/Screenshot.jpg"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 175px;" src="http://3.bp.blogspot.com/_IAqGaYSthkg/TULJVkgIbOI/AAAAAAAAALU/dlqArkeK6dg/s320/Screenshot.jpg" alt="" id="BLOGGER_PHOTO_ID_5567233461796236514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;With this little program you can simply change icons of your android application.&lt;br /&gt;It even lets you change the applications name.&lt;br /&gt;But wait mike..... there's more.....&lt;br /&gt;It even lets you edit the text used in applications.&lt;br /&gt;&lt;br /&gt;Sounds to good to be true...&lt;br /&gt;Well... to be honest.... it is.&lt;br /&gt;But I've come a long way from that initial question to the final answer.&lt;br /&gt;My conclusion so far, it works for most of my applications.&lt;br /&gt;It probably will work on most of yours as well.&lt;br /&gt;Try it out now: &lt;a href="http://forum.xda-developers.com/showthread.php?p=10140039"&gt;APK Edit&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8359995441047908663-854753580202367652?l=woutsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://woutsblog.blogspot.com/feeds/854753580202367652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8359995441047908663&amp;postID=854753580202367652' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default/854753580202367652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default/854753580202367652'/><link rel='alternate' type='text/html' href='http://woutsblog.blogspot.com/2010/12/apk-edit.html' title='APK Edit'/><author><name>Wouter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_IAqGaYSthkg/TULJVkgIbOI/AAAAAAAAALU/dlqArkeK6dg/s72-c/Screenshot.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8359995441047908663.post-3333949955917666907</id><published>2010-04-08T16:05:00.001+02:00</published><updated>2010-04-08T16:05:36.048+02:00</updated><title type='text'>Passed exam 70-235</title><content type='html'>&lt;p&gt;Victory Is Mine!!!   &lt;br /&gt;Today I successfully passed the exam 70-235 meaning that from now on I can call myself technical specialist in:     &lt;br /&gt;&lt;strong&gt;Developing Business Process and Integration Solutions by Using Microsoft BizTalk Server 2006&lt;/strong&gt;     &lt;br /&gt;    &lt;br /&gt;Next one will be exam: 70-241     &lt;br /&gt;&lt;em&gt;Developing Business Process and Integration Solutions by Using Microsoft&amp;#160; BizTalk&amp;#160; Server&amp;#160; 2006 R2&lt;/em&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8359995441047908663-3333949955917666907?l=woutsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://woutsblog.blogspot.com/feeds/3333949955917666907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8359995441047908663&amp;postID=3333949955917666907' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default/3333949955917666907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default/3333949955917666907'/><link rel='alternate' type='text/html' href='http://woutsblog.blogspot.com/2010/04/passed-exam-70-235.html' title='Passed exam 70-235'/><author><name>Wouter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8359995441047908663.post-5083692936016310598</id><published>2010-03-26T15:03:00.001+01:00</published><updated>2010-04-08T16:16:39.845+02:00</updated><title type='text'>Let BizTalk automatically send a WCF Response message on delivery without the use of orchestrations.</title><content type='html'>&lt;p&gt;Recently I faced the challenge of returning a delivery acknowledgement message to an WCF service when it shoots a new message in our BizTalk environment. All this needs to be done using “context based routing”, in other words, without the use of an orchestration. Main reason for this is the extra performance overhead you get using orchestrations.&lt;/p&gt;  &lt;p&gt;To sum it all up, our goal for today is:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;DON’T USE ORCHESTRATIONS! &lt;/li&gt;    &lt;li&gt;Send a dummy message to the WCF service. &lt;/li&gt;    &lt;li&gt;Wait for the message to be placed into the BizTalk messagebox. &lt;/li&gt;    &lt;li&gt;Receive an acknowledgement that the message is indeed accepted by BizTalk. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;After some “intelli searching” on the web I came across this &lt;a href="http://www.bizbert.com/bizbert/2007/09/09/Manually+Sending+A+Response+Back+To+A+Waiting+Web+Service+Client.aspx"&gt;article&lt;/a&gt; of Daniel Probert. In this article he shares his vision on the problem at hand. Being a total newby in BizTalk world his explanation was a bit mindboggling for me. After a couple of hours playing with the concept I manage to recreated his concept to the point I actually understood what was going on beneath the shiny surface.&lt;/p&gt;  &lt;p&gt;It all has to do with a “magical” subscription that will be created on the fly by BizTalk when the receive-port receives a new message. But first things first!&lt;/p&gt;  &lt;p&gt;To be able to send messages to BizTalk using a webservice we can use the “BizTalk WCF Service Publishing Wizard”. This Wizard will guide you thru the process of setting up your Webservice and “connecting” it to your BizTalk application, resulting in a newly created “receive port / location” in your BizTalk Application. This newly created port is by default a Two Way receive port, meaning it can talk both ways (Request/ Response). Exactly what I wished for… NOT!&lt;/p&gt;  &lt;p&gt;The problem lies is the response handling, when BizTalk receives a new incoming message it will try to deliver it to its subscribers and.. that’s about it…. There’s no build-in response system! So what you will experience using the Web-service is a time-out (lack of response) on you WCF request.&lt;/p&gt;  &lt;p&gt;Back to the “magical” subscription part… every time BizTalk accepts a message from a two way port it automatically creates a new subscription for its “response” port subscribing it to ALL messages containing the following promoted properties:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;EpmRRCorrelationToken == {*****} &lt;/li&gt;    &lt;li&gt;RouteDirectToTP == True &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Sadly these properties can’t be promoted the usual way since they are some sort of special system properties. To accomplish the impossible we will have to create a custom pipeline that will do exactly that for us. And that’s exactly what I did, using a little code snippet from Daniel. &lt;a href="http://lh5.ggpht.com/_IAqGaYSthkg/S6y-kgfKZrI/AAAAAAAAAKo/6Pwc9ft7MGo/s1600-h/clip_image002%5B4%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://lh3.ggpht.com/_IAqGaYSthkg/S6y-k06f79I/AAAAAAAAAKs/_KWWRJB2f84/clip_image002_thumb%5B1%5D.jpg?imgmax=800" width="412" height="145" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;After using this custom pipeline as your “Receive Pipeline” BizTalk will send back a copy of the incoming message as an acknowledgement to the initial WCF request.&lt;/p&gt;  &lt;p&gt;Yeah! No more timeout’s, problem solved!    &lt;br /&gt;Installer: &lt;a href="http://wouterspaans.codeplex.com/releases/view/43233#DownloadId=115812"&gt;Windows Installer File (MSI)&lt;/a&gt;     &lt;br /&gt;Sourcecode: &lt;a href="http://wouterspaans.codeplex.com/sourcecontrol/network/Show?projectName=WouterSpaans&amp;amp;changeSetId=44031#"&gt;CodePlex&lt;/a&gt;    &lt;br /&gt;Documentation: &lt;a href="http://wouterspaans.codeplex.com/releases/view/43233#DownloadId=115817"&gt;Word Document&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8359995441047908663-5083692936016310598?l=woutsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://woutsblog.blogspot.com/feeds/5083692936016310598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8359995441047908663&amp;postID=5083692936016310598' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default/5083692936016310598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default/5083692936016310598'/><link rel='alternate' type='text/html' href='http://woutsblog.blogspot.com/2010/03/let-biztalk-automatically-send-wcf.html' title='Let BizTalk automatically send a WCF Response message on delivery without the use of orchestrations.'/><author><name>Wouter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_IAqGaYSthkg/S6y-k06f79I/AAAAAAAAAKs/_KWWRJB2f84/s72-c/clip_image002_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8359995441047908663.post-1162999668322422505</id><published>2009-01-07T16:55:00.013+01:00</published><updated>2009-01-07T17:33:07.498+01:00</updated><title type='text'>Getting a SharePoint Feature GUID, the easy way!</title><content type='html'>Today my colleague &lt;a href="http://blog.mastykarz.nl/"&gt;Waldek&lt;/a&gt; pointed me to an interesting way to find out the "GUID" of a SharePoint Feature.&lt;br /&gt;Only prerequisite is that you have installed the &lt;a href="http://www.microsoft.com/downloadS/details.aspx?familyid=E59C3964-672D-4511-BB3E-2D5E1DB91038&amp;amp;displaylang=en"&gt;Internet Explorer Developer Toolbar&lt;/a&gt;&lt;br /&gt;Go to your feature page "Site Settings &gt; Site Features" or more directly go to /_layouts/ManageFeatures.aspx?Scope=Site&lt;br /&gt;Here you will find the list of deployed features.&lt;br /&gt;Now choose &lt;a href="http://2.bp.blogspot.com/_IAqGaYSthkg/SWTYWWOy8KI/AAAAAAAAAFE/c6MJkEDfxcU/s1600-h/Select+element+by+click.png"&gt;&lt;/a&gt;"Select Element by Click" en select the "Activate" of "Deactivate" button of your feature.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_IAqGaYSthkg/SWTWvLkPZfI/AAAAAAAAAEs/JaVO_k1_Lvw/s1600-h/SharePoint+Feature.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5288587968486794738" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 320px; CURSOR: hand; HEIGHT: 38px" alt="" src="http://2.bp.blogspot.com/_IAqGaYSthkg/SWTWvLkPZfI/AAAAAAAAAEs/JaVO_k1_Lvw/s320/SharePoint+Feature.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now you can see the "GUID" in the elements window&lt;a href="http://4.bp.blogspot.com/_IAqGaYSthkg/SWTXEF-t4pI/AAAAAAAAAE0/SgLpzKKC3Lg/s1600-h/SharePoint+Feature+ID.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5288588327764484754" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 320px; CURSOR: hand; HEIGHT: 162px" alt="" src="http://4.bp.blogspot.com/_IAqGaYSthkg/SWTXEF-t4pI/AAAAAAAAAE0/SgLpzKKC3Lg/s320/SharePoint+Feature+ID.png" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8359995441047908663-1162999668322422505?l=woutsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://woutsblog.blogspot.com/feeds/1162999668322422505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8359995441047908663&amp;postID=1162999668322422505' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default/1162999668322422505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default/1162999668322422505'/><link rel='alternate' type='text/html' href='http://woutsblog.blogspot.com/2009/01/getting-sharepoint-feature-guid-easy.html' title='Getting a SharePoint Feature GUID, the easy way!'/><author><name>Wouter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_IAqGaYSthkg/SWTWvLkPZfI/AAAAAAAAAEs/JaVO_k1_Lvw/s72-c/SharePoint+Feature.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8359995441047908663.post-6798062020397720769</id><published>2008-02-22T11:04:00.000+01:00</published><updated>2008-10-16T12:05:04.839+02:00</updated><title type='text'>I'm in love, her name is MSBuild.</title><content type='html'>&lt;p&gt;A colleague of me pointed out that there are several stages of emotion when developing SharePoint. &lt;em&gt;Ignorance&lt;/em&gt;, &lt;em&gt;Anger&lt;/em&gt;, and finally &lt;em&gt;Acceptance&lt;/em&gt;. This makes you wonder… Why the anger?     &lt;br /&gt;So after experience them all, I found out that the default SharePoint Development workstation provided by Microsoft (Visual Studio in combination with MOSS) was lacking, how should I bring this… Completeness! Every developer in town will automatically say, is there any software that truly complete, well have to acknowledge that I haven’t found any in my lifetime, but the search continues. What I want to point out is that there is a LOT of room in SharePoint Development for tooling. A great resource for all sorts of tooling that will make life easier you can find at &lt;a href="http://www.sharepointblogs.com/"&gt;http://www.sharepointblogs.com/&lt;/a&gt; But we are drifting a bit off topic here. One of the main thing’s that made me angry was the seemingly endless repeating of steps needed while developing in SharePoint. Creating a simple WebPart will take a lot of steps I can tell you (all those xml files, you know what I mean). &lt;/p&gt;  &lt;p&gt;&lt;b&gt;A little less angry…&lt;/b&gt;     &lt;br /&gt;First thing a developer will say when they are confronted with repeating steps, lets automate the process as much as possible.     &lt;br /&gt;Here is where I met the powerful build system Microsoft provides called: MSBuild.     &lt;br /&gt;For example, lets look at the developing process of a WebPart.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You will startup Visual Studio and begin to write your code and create an .webpart file (or previously an .dwp file) &lt;/li&gt;    &lt;li&gt;You will then create the necessary feature structure required for creating an WSP file. &lt;/li&gt;    &lt;li&gt;You will create the WSP file using the command MakeCab.exe &lt;/li&gt;    &lt;li&gt;You will deploy and publish this feature to your website using the command STSADM.exe &lt;/li&gt;    &lt;li&gt;You will activate and try the newly installed feature. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This process (or something similar, like (un)registering your DLL in the GAC for instance) will be used a lot of times during development. Previously we were using batch files for automating our solutions as much as possible.    &lt;br /&gt;But now that we have discovered MSBuild targets we are in the process of getting rid of these batch files and replace them with .target files.     &lt;br /&gt;There are a couple of reasons why I think you should consider using this feature:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;More control, There is a tight integration between Visual Studio and MSBuild providing us with more control over what when happens based on al sort’s of states of your project. &lt;/li&gt;    &lt;li&gt;Reusability, given the fact that MSBuild has tight integration it will give you the power of create more flexible scripts, thereby giving you a more reusable solution. &lt;/li&gt;    &lt;li&gt;Cleaner, A lot of “plumbing” is done behind the scene therefore making your solution cleaner. output of the scripts will be displayed in the output window within Visual Studio instead of separate log files for example (although that’s definitely still one of the possibility’s) &lt;/li&gt;    &lt;li&gt;Intellisense, I will not go into this deeper than necessary, Most likely you know what Intellisense can do for you, less code errors due to human type errors ect. ect. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;Drawback’s:      &lt;br /&gt;&lt;/b&gt;So, is this MSBuild your answer to all your developing questions?     &lt;br /&gt;Definitely not! On the contrarily, there are some little “problems” with using this.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Changing any target files (read: script files) require you to reload your solution. This is because the imported target files will only be evaluated during loading of the projectfile.      &lt;br /&gt;This is mainly a problem when you are creating new template’s and need to change the target files a lot. &lt;/li&gt;    &lt;li&gt;Although using MSBuild instead of Batch Files is more clean, this “behind the scene’s plumbing” can make the whole process less transparent. So here come in the reason that you always need to communicate (read: create documentation) about what's is happening during the process. I myself find it very useful to use the output windows for showing what is happening in the MSBuild process. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;How to use it:    &lt;br /&gt;So, now that you have read the benefit's and drawback's you may find yourself questioning, can this MSBuild target thing do something for me, and where do i start exploring?     &lt;br /&gt;Well,&amp;#160; just Google &amp;quot;MSBuild Target&amp;quot; you will find a lot of in depth information about how to do the magic. In this post I will explain my conceptual point of view which I used for my recently created template. The template will consist of a couple of xml based files, all sharing the extension .target     &lt;br /&gt;    &lt;br /&gt;Here's my concept:     &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;\SolutionDir\MSBuild\&lt;/em&gt;     &lt;br /&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; Imtech.Common.Import.targets      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Imtech.Common.Properties.targets       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Imtech.Common.Targets.targets       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Imtech.Common.Tasks.targets       &lt;br /&gt;&lt;/strong&gt;    &lt;br /&gt;&lt;em&gt;\SolutionDir\ProjectDir\MSBuild\      &lt;br /&gt;&lt;/em&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160; Imtech.Project.Properties.targets      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Imtech.Project.Targets.targets       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Imtech.Project.Tasks.targets       &lt;br /&gt;&lt;/strong&gt;    &lt;br /&gt;I will break these file's up into pieces for you     &lt;br /&gt;As you can see in the used naming convention there are really only 4 thinks to explain here namely: Import, Properties, Targets and Tasks (except from the fact that I used 2 different folders to put these files in, but more about that later on).&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;em&gt;*.Import.targets&lt;/em&gt;       &lt;br /&gt;This is the file that will connect all the other file's in the right order and an reference to this file will be placed in your .proj file.       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;*.Properties.targets&lt;/em&gt;       &lt;br /&gt;In these file's you will define you &amp;quot;dynamic&amp;quot; properties.       &lt;br /&gt;for example, the path of your local IIS folder or the location of your STSADM.EXE tool. &lt;/li&gt;    &lt;li&gt;&lt;em&gt;*.Targets.targets&lt;/em&gt;       &lt;br /&gt;These file's will be your &amp;quot;coordinator&amp;quot;, and will provide you with the possibility to enforce logic based on the selected &amp;quot;Solution Configuration&amp;quot; and properties you defined in the Properties.targets&lt;em&gt;. &lt;/em&gt;It will call tasks defined in your Task.target files based upon the implemented logic.       &lt;br /&gt;In other words: this will be your router (I used to be a network engineer, and sometimes still think in terms of networks) &lt;/li&gt;    &lt;li&gt;&lt;em&gt;*.Tasks.target&lt;/em&gt;       &lt;br /&gt;In these file's you will find separate pieces of functionality that will be referenced in your Targets.target file.       &lt;br /&gt;Here you will define the actual commands that will be executed and name/group them using some sort of logical convention.       &lt;br /&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;So now that we have covered the difference's between the file's I will explain the 2 folders I used. Earlier I explain that one of the benefits of using MSBuild targets is that it's reusable. This means that in a new project, I can use the same template as I used before. In order to do this, you have to separate any execution logic from your project dependency's. This is where the properties target file kick's into place. In the properties you will define all your project dependant things. And because you probably have more than one project in your solution you have to deal with some &amp;quot;global&amp;quot; and some &amp;quot;local&amp;quot; dependencies. That's why I used 2 folder's, one where you can declare your globally used targets, task and properties an one folder where you can (re)define these properties, or even extend your targets and tasks.    &lt;br /&gt;    &lt;br /&gt;If needed I will post some sample's of the target files we use.     &lt;br /&gt;As always, if you have some comment, don't hesitate to... comment! &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8359995441047908663-6798062020397720769?l=woutsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://woutsblog.blogspot.com/feeds/6798062020397720769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8359995441047908663&amp;postID=6798062020397720769' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default/6798062020397720769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default/6798062020397720769'/><link rel='alternate' type='text/html' href='http://woutsblog.blogspot.com/2008/10/i-in-love-her-name-is-msbuild.html' title='I&amp;#39;m in love, her name is MSBuild.'/><author><name>Wouter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8359995441047908663.post-4767720074017091359</id><published>2008-02-21T11:46:00.001+01:00</published><updated>2008-02-21T11:46:07.169+01:00</updated><title type='text'>Silverlight and SharePoint, a beautiful marriage?</title><content type='html'>&lt;p&gt;So after almost 2 months of silence I decided it&amp;#8217;s time for some new postings. As you may know by now, I have been very busy with Sharepoint the last couple of months. Currently I&amp;#8217;m creating a whole new Internet facing website as requested by my boss. Work is progressing, ok not that very fast, I&amp;#8217;m still learning more of the sometimes mystical world of SharePoint every day (didn&amp;#8217;t I use the word mystical in a previous post, well the word has its purpose, believe me).&lt;/p&gt;  &lt;p&gt;So without any further ado, I created a SharePoint WebPart that will show an entire Picture Library in the form of a SilverLight slideshow. The WebPart is mainly based on a project called &lt;a href="http://www.firstfloorsoftware.com/Slideshow"&gt;Silverlight Slideshow&lt;/a&gt; initiated by Koen Zwikstra from Firstfloorsoftware.com All I had to do add a little functionality and wrap the whole package into an WSP.    &lt;br /&gt;First problem I had to tackle was the logic needed to retrieve information from an SharePoint Picture Library and somehow inject this info into the slideshow.    &lt;br /&gt;The original program uses an XML file as its main source of information, making the world a little better place for me ;-)    &lt;br /&gt;I created a nice Handler that will do this for me and present the found information in a way the slideshow will &amp;#8220;swallow&amp;#8221;.    &lt;br /&gt;This handler will create the XML based on 3 properties of the library (Image, Thumbnail and Title).    &lt;br /&gt;By default there are a lot of configurable properties build into this great SilverLight control. I wrapped all these properties into the WebPart public properties, giving you the great power of controlling the presentation of the control without leaving your SharePoint GUI.    &lt;br /&gt;For example, you can turn on/off the buttons, thumbnail, tracker of just change the colors used to render it.    &lt;br /&gt;Ok well, how does this thing work in real life then&amp;#8230;.    &lt;br /&gt;    &lt;br /&gt;All you have to do is:    &lt;br /&gt;1. Deploy the WSP to your Sharepoint site.    &lt;br /&gt;2. Activate the newly deployed feature in your Site Settings    &lt;br /&gt;&lt;a href="http://lh3.google.com/WouterSpaans1/R71WX6QiYnI/AAAAAAAAACc/cZ3LupQM_Ws/SlideShow%20-%20Feature%5B6%5D"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="188" alt="SlideShow - Feature" src="http://lh6.google.com/WouterSpaans1/R71WYqQiYoI/AAAAAAAAACk/Ymcto9TXbYo/SlideShow%20-%20Feature_thumb%5B4%5D" width="260" border="0" /&gt;&lt;/a&gt;&amp;#160;&amp;#160; &lt;br /&gt;3. Add the WebPart to your site.    &lt;br /&gt;&lt;a href="http://lh4.google.com/WouterSpaans1/R71WZKQiYpI/AAAAAAAAACs/2hxQY2goi-c/SlideShow%20-%20AddWebPart%5B3%5D"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="260" alt="SlideShow - AddWebPart" src="http://lh6.google.com/WouterSpaans1/R71WZqQiYqI/AAAAAAAAAC0/Q0BwtSDqqC4/SlideShow%20-%20AddWebPart_thumb%5B1%5D" width="229" border="0" /&gt;&lt;/a&gt;     &lt;br /&gt;4. Select the Picture Library for your image resource &lt;a href="http://lh4.google.com/WouterSpaans1/R71WaKQiYrI/AAAAAAAAAC8/AOlnI4PXKMY/SlideShow%20-%20Properties%5B3%5D"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="260" alt="SlideShow - Properties" src="http://lh6.google.com/WouterSpaans1/R71WaqQiYsI/AAAAAAAAADE/JuJ6LCBC_cs/SlideShow%20-%20Properties_thumb%5B1%5D" width="139" border="0" /&gt;&lt;/a&gt;    &lt;br /&gt;5. Change the properties of the WebPart to reflect your inner desires.    &lt;br /&gt;&amp;#160; &lt;br /&gt;Volia, a fully functional slideshow on your page!    &lt;br /&gt;So, where can I download it you might wondering&amp;#8230;    &lt;br /&gt;Before sharing the code with the community, I first have to check with the original creator of the Silverlight control and see if he&amp;#8217;s ok with me releasing this as a WebPart.    &lt;br /&gt;For now you will have to do with a screenshot of the WebPart in action.    &lt;br /&gt;&lt;a href="http://lh4.google.com/WouterSpaans1/R71WbKQiYtI/AAAAAAAAADM/xvlbZm9qrS8/SlideShow%20-%20Preview%5B4%5D"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="270" alt="SlideShow - Preview" src="http://lh6.google.com/WouterSpaans1/R71WbqQiYuI/AAAAAAAAADU/MlKpmpd3iyc/SlideShow%20-%20Preview_thumb%5B2%5D" width="441" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8359995441047908663-4767720074017091359?l=woutsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://woutsblog.blogspot.com/feeds/4767720074017091359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8359995441047908663&amp;postID=4767720074017091359' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default/4767720074017091359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default/4767720074017091359'/><link rel='alternate' type='text/html' href='http://woutsblog.blogspot.com/2008/02/silverlight-and-sharepoint-beautiful.html' title='Silverlight and SharePoint, a beautiful marriage?'/><author><name>Wouter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8359995441047908663.post-4133667574019253610</id><published>2007-12-28T10:58:00.001+01:00</published><updated>2007-12-28T10:58:09.258+01:00</updated><title type='text'>My first SharePoint webpart</title><content type='html'>&lt;p&gt;A few months ago I created my first SharePoint webpart.    &lt;br /&gt;The conceptual idea was to have a webpart where items from the contenttype calendar would be aggregated and displayed to the enduser in the form of an eventlist.     &lt;br /&gt;Something like:     &lt;br /&gt;&lt;a href="http://lh3.google.com/WouterSpaans1/R3TIpOOGWSI/AAAAAAAAABw/gGI8kFDT5hs/EvenementenWebPart0110"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="109" alt="EvenementenWebPart01" src="http://lh3.google.com/WouterSpaans1/R3TIqOOGWTI/AAAAAAAAAB4/SKDXn2IYxhs/EvenementenWebPart01_thumb8" width="260" border="0" /&gt;&lt;/a&gt;     &lt;br /&gt;When the users clicks on an item, a new page would be displayed with more information about the selected event.     &lt;br /&gt;Something like:     &lt;br /&gt;&lt;a href="http://lh6.google.com/WouterSpaans1/R3TIq-OGWUI/AAAAAAAAACA/s_aMZjh-9DM/EvenementenWebPart0212"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="88" alt="EvenementenWebPart02" src="http://lh3.google.com/WouterSpaans1/R3TIsOOGWVI/AAAAAAAAACI/hTD6RE0Nuf0/EvenementenWebPart02_thumb8" width="260" border="0" /&gt;&lt;/a&gt;     &lt;br /&gt;    &lt;br /&gt;1st step in creating this WebPart was to find out what components are involved.     &lt;br /&gt;So the WebPart will do the following basic steps every time it is viewed.     &lt;br /&gt;1. Get all the listitems (based on a public property's &amp;quot;SiteName&amp;quot; and &amp;quot;ListName&amp;quot; )     &lt;br /&gt;2. Sort the listitems     &lt;br /&gt;3. Cut the list to the appropriate size (based on a public property &amp;quot;NumberOfEvents&amp;quot;)     &lt;br /&gt;4. Transform the list to an appropriate XML representation     &lt;br /&gt;5. Transform the XML representation by using a XLS (based on a public property &amp;quot;XSL&amp;quot;)     &lt;br /&gt;6. Additionally if an event happens in the future, add a link to an InfoPath form where the user can subscribe to the upcoming event. This form will be forwarded by email.     &lt;br /&gt;    &lt;br /&gt;Next time I will post some short pieces of code.    &lt;br /&gt;For now I just send you to this great &lt;a href="http://blah.winsmarts.com/2006/05/14/writing-custom-webparts-for-sharepoint-2007.aspx"&gt;resource&lt;/a&gt; on how to build your own WebPart for SharePoint    &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8359995441047908663-4133667574019253610?l=woutsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://woutsblog.blogspot.com/feeds/4133667574019253610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8359995441047908663&amp;postID=4133667574019253610' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default/4133667574019253610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default/4133667574019253610'/><link rel='alternate' type='text/html' href='http://woutsblog.blogspot.com/2007/12/my-first-sharepoint-webpart.html' title='My first SharePoint webpart'/><author><name>Wouter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8359995441047908663.post-1300911771903993769</id><published>2007-12-27T18:24:00.001+01:00</published><updated>2007-12-28T10:44:32.351+01:00</updated><title type='text'>Regular expression? No Wiener Melange for me please....</title><content type='html'>This is what most of us will say when we hear the term &amp;quot;Regular expression&amp;quot;. No it's not a brand new coffee brand, no it isn't the most common used (and therefore regular) facial expression of the world. No this time I'm talking about some sort of query language used by freaky developers. Recently my program experience is expanding (fast or slow, it IS expanding) and from time to time I literally bounce of a new subject.   &lt;br /&gt;Regular expressions is just one of them.   &lt;br /&gt;The concept really is fascinating!   &lt;br /&gt;These expressions can do almost anything, except make you a delicious Wiener Melange (on the other hand, could your coffee machine make one for you &amp;quot;without&amp;quot; regular expressions? that the question!).   &lt;br /&gt;Well jokes aside, I really was fascinated by the concept and couldn't resist taking a little sneak preview in this crazy world of expressions.   &lt;br /&gt;An there come's the &amp;quot;bounce&amp;quot;...   &lt;br /&gt;Really, can anyone tell me what the hack this means???   &lt;pre&gt;&lt;em&gt;^((?&amp;gt;[a-zA-Z\d!#$%&amp;amp;'*+\-/=?^_`{|}~]+\x20*|&amp;quot;((?=[\x01-&lt;br /&gt;\x7f])[^&amp;quot;\\]|\\[\x01-\x7f])*&amp;quot;\x20*)*(?&amp;lt;angle&amp;gt;&amp;lt;))?((?!&lt;br /&gt;\.)(?&amp;gt;\.?[a-zA-Z\d!#$%&amp;amp;'*+\-/=?^_`{|}~]+)+|&amp;quot;((?=[\x01-&lt;br /&gt;\x7f])[^&amp;quot;\\]|\\[\x01-\x7f])*&amp;quot;)@(((?!-)[a-zA-Z\d\-]+(?&lt;br /&gt;&amp;lt;!-)\.)+[a-zA-Z]{2,}|\[(((?(?&amp;lt;!\[)\.)(25[0-5]|2[0-4]\d|&lt;br /&gt;[01]?\d?\d)){4}|[a-zA-Z\d\-]*[a-zA-Z\d]:((?=[\x01-&lt;br /&gt;\x7f])[^\\\[\]]|\\[\x01-\x7f])+)\])(?(angle)&amp;gt;)$&lt;/em&gt;&lt;/pre&gt;&lt;br /&gt;Well, if you break it down piece by piece you will eventually see some logic in the above syntax. To safe you all some backtracking time, here is the answer: The above syntax can be used for validating the syntax of an email address. Well, for me this isn't that logical. From a conceptual point of view these sort of expression can have tremendous power and can be used in very complex situations like pattern recognition. For now I say: Back to the schoolbooks, we've got a lot to learn!  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8359995441047908663-1300911771903993769?l=woutsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://woutsblog.blogspot.com/feeds/1300911771903993769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8359995441047908663&amp;postID=1300911771903993769' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default/1300911771903993769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default/1300911771903993769'/><link rel='alternate' type='text/html' href='http://woutsblog.blogspot.com/2007/12/regular-expression-no-wiener-melange.html' title='Regular expression? No Wiener Melange for me please....'/><author><name>Wouter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8359995441047908663.post-3187764784026116712</id><published>2007-12-27T13:34:00.000+01:00</published><updated>2007-12-27T17:47:40.794+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='class'/><category scheme='http://www.blogger.com/atom/ns#' term='altiris'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>AltirisSVS Class</title><content type='html'>&lt;p&gt;It's been a while since my last post and progress on my first little side-project is.... slow... The more I think of this project, the more I realize that I'm sort of reinventing the wheel. There are some great free alternative ways of doing what i want and i will look into them as soon as possible. So for now,&amp;#160; &lt;br /&gt;&lt;span style="font-style: italic"&gt;* 1st project status: on-hold&lt;/span&gt; &lt;/p&gt;  &lt;p&gt;As many of you programmers over the world would recognize, There's ALWAYS plenty of room for new ideas in a programmers head, but way to little free time to actually program those wonderful ideas. One of those ideas I challenged before is the idea of creating a general .NET class that will provide me with various methods for the purpose of controlling the SUPER COOL program &lt;a href="http://www.altiris.com/"&gt;AltirisSVS&lt;/a&gt; (Software Virtualization).&lt;/p&gt;  &lt;p&gt;A little time ago I created a little solution but as messy as i am i don't know where I have the sourcecode of this little thingy. Didn't have a backup, so I'm forced to recreate the whole program, this time I will code my thing in C# (as apposed to the previous version that was created in VB.NET).    &lt;br /&gt;To give you a short overview of what the hell I'm going to do we will dive in a little deeper in the magical world of virtualization.&lt;/p&gt;  &lt;p&gt;&lt;span style="font-weight: bold"&gt;So what is AlririsSVS?&lt;/span&gt;     &lt;br /&gt;The guys at &lt;a href="http://www.altiris.com/"&gt;Altiris&lt;/a&gt; created a program that well... virtualizes software installations. To give you a more understandable image, imagine yourself having a pc. That's probably not that hard to imagine, since most of you reading this post are doing this on there own personal desktop. Next step is look at your word processor. Most likely you will find a program like Microsoft Word 2003 or something similar like it. Nothing crazy going on at this stage. Until your boss sends you an MS Word document that was created with the newer version of Microsoft Office 2007 (XDOC format). This is a document format that isn't supported by your older 2003 version of Office. Still not that big of a problem, just upgrade your Office version to the newer 2007 version and off we go! But maybe you just liked office 2003 or corporate policies prohibits you to delete this version. Now what to do???&lt;/p&gt;  &lt;p&gt;Here is when &lt;a href="http://www.altiris.com/"&gt;AltirisSVS&lt;/a&gt; come's into play!!!     &lt;br /&gt;Most program's on your pc don't &amp;quot;bite&amp;quot; each other, but some programs will! Program's like Microsoft Office are using so called shared &lt;a href="http://en.wikipedia.org/wiki/Dynamic-link_library"&gt;dll&lt;/a&gt; files. These files are transferred to your computer during installation and will nestle themselves wherever they are comfortable. Nothing wrong with this, those little &lt;a href="http://en.wikipedia.org/wiki/Dynamic-link_library"&gt;dll's&lt;/a&gt; will do there work just fine and you probable will never notice them, until you want to run 2 different version of the same program next to another on one pc. Then the new installation will probably overwrite some of these &lt;a href="http://en.wikipedia.org/wiki/Shared_library"&gt;shared&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Dynamic-link_library"&gt;dll&lt;/a&gt; files without notifying other programs on your pc. &lt;/p&gt;  &lt;p&gt;Now you can find yourself with a computer who was 2 versions installed of the same program (for example MS Word 2003 / MS Word 2007). The shared files on your computer will all be version 2007 and you will have trouble running the older 2003 version.    &lt;br /&gt;So this is a big NO GO!!!     &lt;br /&gt;This problem doesn't occur if you virtualize these installations and run them in separated virtualized environments. Well, lets install &lt;a href="http://www.vmware.com/"&gt;VMware&lt;/a&gt; or &lt;a href="http://www.microsoft.com/windows/products/winfamily/virtualpc/default.mspx"&gt;Virtual PC&lt;/a&gt;, and install the software into a new virtual pc most of the people will think, but there are WRONG! Install AltirisSVS and you will be able to create the so called &amp;quot;Layers&amp;quot;     &lt;br /&gt;In this layer you can then install an application. The layer will be an &amp;quot;&lt;a href="http://en.wikipedia.org/wiki/Sandbox_(computer_security)"&gt;sandboxed&lt;/a&gt;&amp;quot; environment where all the program files and shared dll will be found. This layer is very flexible, you can enable/disable it, making it possible to totally hide you installed application from the operating systems perspective. You can download a free version from the website (need to be a registered user, so first register on there website). Just play with the software for a while and you will see!&lt;/p&gt;  &lt;p&gt;Question some people might ask, if this software is that great, why wanna code something around it? Well, at &lt;a href="http://www.altiris.com/"&gt;Altiris&lt;/a&gt; they did a great job building the whole virtualisation platform, and on top of that, they created a nice &lt;a href="http://www.wilsonmar.com/1wmiwbem.htm"&gt;WMI interface&lt;/a&gt; so that you can manage your layers through code. And, where there are interfaces, there are those annoying programmers who just can't resist to talk to it.     &lt;br /&gt;Well, that's the main reason i started this project.     &lt;br /&gt;Why? because i can!     &lt;br /&gt;So the first thing to do is making a little framework as a base, letting me extend this framework in the future.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Create a little &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpgrfmanagementstronglytypedclassgeneratormgmtclassgenexe.asp"&gt;WMI Wrapper&lt;/a&gt; for the Altiris WMI class &lt;/li&gt;    &lt;li&gt;Create a C# Class      &lt;ul&gt;       &lt;li&gt;Activate_Layer(string LayerName) &lt;/li&gt;        &lt;li&gt;DeActivate_Layer(string LayerName) &lt;/li&gt;        &lt;li&gt;EnumerateLayers() &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Additional resources:    &lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=2CC30A64-EA15-4661-8DA4-55BBC145C30E&amp;amp;displaylang=en"&gt;Microsoft WMI Code Creator&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://juice.altiris.com/article/1376/a-quick-way-to-write-svs-scripts"&gt;Good article on how to make a SVS wmi script&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://www.sharepointblogs.com/tmt/default.aspx"&gt;Tech MOSS team, created some nice tools for developers&lt;/a&gt;     &lt;br /&gt;    &lt;br /&gt;A little sample code preview (written by &lt;a href="http://juice.altiris.com/article/1376/a-quick-way-to-write-svs-scripts#comment-2287"&gt;rcboenne&lt;/a&gt;) &lt;div style="border: 1pt solid rgb(204, 204, 204); padding-top: 1pt; padding-bottom: 1pt; background-color: rgb(245, 245, 245); background-image: none; background-repeat: repeat; background-attachment: scroll; overflow: auto; font-size: 10pt; width: 98%; color: black; font-family: courier new; height: 200px; line-height: 0.5em;"&gt;   &lt;!--&lt;br /&gt;{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0??;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;??\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;??\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;??\red192\green192\blue192;}??\fs20 \cf2 using\cf0  System;\par ??\cf2 using\cf0  System.Collections.Generic;\par ??\cf2 using\cf0  System.Text;\par ??\cf2 using\cf0  System.Management;\par ??\cf2 using\cf0  System.Windows.Forms;\par ??\par ??\cf2 namespace\cf0  Focus_XP_SVS_Layer_Console\par ??\{\par ??    \cf2 public\cf0  \cf2 class\cf0  WMITest\par ??    \{\par ??        \cf2 public\cf0  \cf2 static\cf0  \cf2 void\cf0  Test()\par ??        \{\par ??            \cf2 try\par ??\cf0             \{\par ??\par ??                ManagementScope scope = \cf2 new\cf0  ManagementScope(\cf13 "root\\\\default"\cf0 );\par ??                scope.Connect();\par ??                ManagementClass classInstance = \cf2 new\cf0  ManagementClass(\par ??                scope,\par ??                \cf2 new\cf0  ManagementPath(\cf13 "AltirisVSProv"\cf0 ),\par ??                \cf2 null\cf0 );\par ??\par ??                \cf11 // Obtain in-parameters for the method\par ??\cf0                 ManagementBaseObject inParams =\par ??                classInstance.GetMethodParameters(\cf13 "EnumerateLayers"\cf0 );\par ??\par ??                \cf11 // Add the input parameters.\par ??\cf0                 inParams[\cf13 "Verbose"\cf0 ] = 1;\par ??\par ??                \cf11 // Execute the method and obtain the return values.\par ??\cf0                 ManagementBaseObject outParams =\par ??                classInstance.InvokeMethod(\cf13 "EnumerateLayers"\cf0 , inParams, \cf2 null\cf0 );\par ??\par ??                \cf11 // List outParams\par ??\cf0                 \cf10 Console\cf0 .WriteLine(\cf13 "Out parameters:"\cf0 );\par ??                \cf10 Console\cf0 .WriteLine(\cf13 "EnumData: "\cf0  + outParams[\cf13 "EnumData"\cf0 ]);\par ??                \cf10 Console\cf0 .WriteLine(\cf13 "ReturnValue: "\cf0  + outParams[\cf13 "ReturnValue"\cf0 ]);\par ??            \}\par ??            \cf2 catch\cf0  (ManagementException err)\par ??            \{\par ??                MessageBox.Show(\cf13 "An error occurred while trying to execute the WMI method: "\cf0  + err.Message);\par ??            \}\par ??        \}\par ??\par ??    \}\par ??\}}&lt;br /&gt;--&gt; &lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System.Text;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System.Management;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System.Windows.Forms;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt; Focus_XP_SVS_Layer_Console&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;{&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; WMITest&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Test()&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;try&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ManagementScope scope = &lt;span style="color: blue;"&gt;new&lt;/span&gt; ManagementScope(&lt;span style="color: maroon;"&gt;"root\\default"&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; scope.Connect();&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ManagementClass classInstance = &lt;span style="color: blue;"&gt;new&lt;/span&gt; ManagementClass(&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; scope,&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;new&lt;/span&gt; ManagementPath(&lt;span style="color: maroon;"&gt;"AltirisVSProv"&lt;/span&gt;),&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;21&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;null&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;22&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;23&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Obtain in-parameters for the method&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;24&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ManagementBaseObject inParams =&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;25&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; classInstance.GetMethodParameters(&lt;span style="color: maroon;"&gt;"EnumerateLayers"&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;26&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;27&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Add the input parameters.&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;28&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; inParams[&lt;span style="color: maroon;"&gt;"Verbose"&lt;/span&gt;] = 1;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;29&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;30&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Execute the method and obtain the return values.&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;31&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ManagementBaseObject outParams =&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;32&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; classInstance.InvokeMethod(&lt;span style="color: maroon;"&gt;"EnumerateLayers"&lt;/span&gt;, inParams, &lt;span style="color: blue;"&gt;null&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;33&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;34&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// List outParams&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;35&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: teal;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: maroon;"&gt;"Out parameters:"&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;36&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: teal;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: maroon;"&gt;"EnumData: "&lt;/span&gt; + outParams[&lt;span style="color: maroon;"&gt;"EnumData"&lt;/span&gt;]);&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;37&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: teal;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: maroon;"&gt;"ReturnValue: "&lt;/span&gt; + outParams[&lt;span style="color: maroon;"&gt;"ReturnValue"&lt;/span&gt;]);&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;38&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;39&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;catch&lt;/span&gt; (ManagementException err)&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;40&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;41&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox.Show(&lt;span style="color: maroon;"&gt;"An error occurred while trying to execute the WMI method: "&lt;/span&gt; + err.Message);&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;42&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;43&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;44&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;45&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;46&lt;/span&gt;&amp;nbsp;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8359995441047908663-3187764784026116712?l=woutsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://woutsblog.blogspot.com/feeds/3187764784026116712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8359995441047908663&amp;postID=3187764784026116712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default/3187764784026116712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default/3187764784026116712'/><link rel='alternate' type='text/html' href='http://woutsblog.blogspot.com/2007/12/altirissvs-class.html' title='AltirisSVS Class'/><author><name>Wouter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8359995441047908663.post-9196474702642493695</id><published>2007-12-07T10:41:00.000+01:00</published><updated>2007-12-27T12:18:03.824+01:00</updated><title type='text'>Fighting against my own ignorance</title><content type='html'>&lt;p&gt;Yesterday I started, what seemed like, a little side project. The idea was very straightforward, just write a little GUI to control some installation scripts. Soon after finishing the brainstorm session I eagerly started to code the little thingy. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;First thing I wanted in place was a little decompression class for the purpose of decompressing a cabinet file. After searching a way to do this from within the code I came across several problems so I thought, what the hack, let&amp;#8217;s just make a call from within our code to the external windows program Expand.exe and save some time instead of trying to reinvent the wheel. This eventually did the trick for me! 1 down, a little more to go ;-) &lt;br /&gt;&lt;br /&gt;&lt;div style="border: 1pt solid rgb(204, 204, 204); padding-top: 1pt; padding-bottom: 1pt; background-color: rgb(245, 245, 245); background-image: none; background-repeat: repeat; background-attachment: scroll; overflow: auto; font-size: 10pt; width: 100%; color: black; font-family: courier new; height: 200px; line-height: 0.5em;"&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;29&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; StartProcces(&lt;span style="color: blue;"&gt;string&lt;/span&gt; FileName, &lt;span style="color: blue;"&gt;string&lt;/span&gt; Arguments, &lt;span style="color: teal;"&gt;TextBox&lt;/span&gt; OutputTextBox)&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;30&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;31&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.Diagnostics.&lt;span style="color: teal;"&gt;Process&lt;/span&gt; extractCmd = &lt;span style="color: blue;"&gt;new&lt;/span&gt; System.Diagnostics.&lt;span style="color: teal;"&gt;Process&lt;/span&gt;();&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;32&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; extractCmd.EnableRaisingEvents = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;33&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; extractCmd.StartInfo.FileName = FileName;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;34&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; extractCmd.StartInfo.Arguments = Arguments;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;35&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; extractCmd.StartInfo.RedirectStandardOutput = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;36&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; extractCmd.StartInfo.RedirectStandardInput = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;37&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; extractCmd.StartInfo.UseShellExecute = &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;38&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; extractCmd.StartInfo.CreateNoWindow = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;39&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; extractCmd.Start();&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;40&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (OutputTextBox != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;41&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;42&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt; StringToWrite = &lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;43&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;while&lt;/span&gt; (&lt;span style="color: blue;"&gt;null&lt;/span&gt; != (StringToWrite = extractCmd.StandardOutput.ReadLine()))&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;44&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;45&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; AddToProccesViewer(StringToWrite, OutputTextBox);&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;46&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;47&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;48&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; extractCmd.WaitForExit();&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;49&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;    &lt;li&gt;2nd part of this little adventure was the creation of a class that made it possible to actually run external program&amp;#8217;s and that give me the option to redirect it&amp;#8217;s output to something like a textbox for instance. The main part of this code I already created for the extraction of the cabinet file. At first a had a little problem writing the output real-time, but after some little tweak&amp;#8217;s I had it, a working class to run some simple dos programs. &lt;/li&gt;    &lt;li&gt;3rd part would be the easiest of them all, just read the little XML file into the program and iterate through the imported document letting me run the scripted programs. Well, this sounds simpler than it truly is (taking into consideration that the whole XML stuff is quite new to me). First I started off importing the whole XML into a dataset, this didn&amp;#8217;t work that well for me. ok, let&amp;#8217;s thinks, the problem I had was that I was missing some sort of relation between the imported items. Maybe XSD could help me out of this mess after playing a little with the program XSD.exe I suddenly a whole class that was created from my little XML file. A little overkill if you ask me. So I started it all over. The trick I now use is that I added a little attribute to the program elements called id. Now I&amp;#8217;m using only the xml file (no extra schema&amp;#8217;s) and iterating thru the file using several XPath expressions instead of relying of the internal relationship of the document, so for now, no usage of the crazy ChildElements. &lt;br /&gt;&lt;br /&gt;&lt;div style="border: 1pt solid rgb(204, 204, 204); padding-top: 1pt; padding-bottom: 1pt; background-color: rgb(245, 245, 245); background-image: none; background-repeat: repeat; background-attachment: scroll; overflow: auto; font-size: 10pt; width: 100%; color: black; font-family: courier new; height: 200px; line-height: 0.5em;"&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;79&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; ReadXml()&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;80&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;81&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (System.IO.&lt;span style="color: teal;"&gt;File&lt;/span&gt;.Exists(TMP_PATH + XML_FILENAME))&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;82&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;83&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt; myXMLfile = &lt;span style="color: maroon;"&gt;@""&lt;/span&gt; + TMP_PATH + XML_FILENAME;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;84&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt; myXMLschema = &lt;span style="color: maroon;"&gt;@""&lt;/span&gt; + TMP_PATH + XSD_FILENAME;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;85&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; doc = &lt;span style="color: blue;"&gt;new&lt;/span&gt; System.Xml.&lt;span style="color: teal;"&gt;XmlDocument&lt;/span&gt;();&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;86&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; doc.Load(TMP_PATH + XML_FILENAME);&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;87&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (System.Xml.&lt;span style="color: teal;"&gt;XmlNode&lt;/span&gt; n &lt;span style="color: blue;"&gt;in&lt;/span&gt; doc.SelectNodes(&lt;span style="color: maroon;"&gt;"//Program[@id]"&lt;/span&gt;))&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;88&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;89&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; AddToProccesViewer(&lt;span style="color: maroon;"&gt;"Title: "&lt;/span&gt; + n.SelectSingleNode(&lt;span style="color: maroon;"&gt;"Title"&lt;/span&gt;).InnerText, textBox1);&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;90&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; AddToProccesViewer(&lt;span style="color: maroon;"&gt;"Command: "&lt;/span&gt; + n.SelectSingleNode(&lt;span style="color: maroon;"&gt;"Command"&lt;/span&gt;).InnerText, textBox1);&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;91&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; AddToProccesViewer(BuildParameter(n.SelectSingleNode(&lt;span style="color: maroon;"&gt;"."&lt;/span&gt;).Attributes[0].InnerText), textBox1);&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;92&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;93&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt; cmd = n.SelectSingleNode(&lt;span style="color: maroon;"&gt;"Command"&lt;/span&gt;).InnerText;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;94&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt; param = BuildParameter(n.SelectSingleNode(&lt;span style="color: maroon;"&gt;"."&lt;/span&gt;).Attributes[0].InnerText);&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;95&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt; showoutput = n.SelectSingleNode(&lt;span style="color: maroon;"&gt;"ShowOutputInWindow"&lt;/span&gt;).InnerText;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;96&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (showoutput == &lt;span style="color: maroon;"&gt;"True"&lt;/span&gt;)&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;97&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;98&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; StartProcces(cmd, param, textBox1);&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;99&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;100&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;101&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;102&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; StartProcces(cmd, param, &lt;span style="color: blue;"&gt;null&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;103&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;104&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;105&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;106&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;    &lt;li&gt;4th part of the project would be putting the whole thing together. This is the currently state of the project. I discovered a little inconvenience, Dos program&amp;#8217;s that require user input seem to &amp;#8220;hang&amp;#8221;, so I have to trigger some sort of event in case this happens and let the user (or the Deploy.xml scripting file) choose the appropriate action. After having resolved this issue I will take on another challenge. I have to build some sort of functionality that makes it possible to editing file&amp;#8217;s that are extracted from the cab file based on some sort of user input (Example: The installation program asks a destination directory and has to change several batchfile&amp;#8217;s in the cab file to make the necessary changes that will make the batchfile&amp;#8217;s copy file&amp;#8217;s to this user provided path)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt; That&amp;#8217;s it for now, back to code!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8359995441047908663-9196474702642493695?l=woutsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://woutsblog.blogspot.com/feeds/9196474702642493695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8359995441047908663&amp;postID=9196474702642493695' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default/9196474702642493695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default/9196474702642493695'/><link rel='alternate' type='text/html' href='http://woutsblog.blogspot.com/2007/12/fighting-against-my-own-ignorance.html' title='Fighting against my own ignorance'/><author><name>Wouter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8359995441047908663.post-2283219989167114186</id><published>2007-12-05T10:36:00.000+01:00</published><updated>2007-12-27T12:11:00.513+01:00</updated><title type='text'>Welcome.♦</title><content type='html'>&lt;p&gt;My first post will be about a little program I'm going to create.   &lt;br /&gt;The purpose of this program is to make a very extensible setup program.    &lt;br /&gt;Recently i finished a project where a SharePoint website was delivered to a customer. The installation procedure was already greatly simplified by my colleague's and the only thing the customer would have to do is simply adjust a little batchfile and a xml file and run the batch file.    &lt;br /&gt;The problem with this sort of deployment of an application is that it's mainly functional and has a lack of GUI.    &lt;br /&gt;So after a little brainstorming the idea was born to create an flexible/extensible installer method which can be used for new projects.    &lt;br /&gt;The problem with MSI is that is rather complicated to build (if you don't know what you’re doing)    &lt;br /&gt;So without any further ado i present to you the concept of the idea: &lt;/p&gt;  &lt;p&gt;First of all is that the whole setup package will consist of only 2 files.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Setup.exe &lt;/li&gt;    &lt;li&gt;Deploy.cab &lt;/li&gt; &lt;/ul&gt;  The setup.exe will automatically decompress the 2nd file and in there it will find an xml file called "Deploy.xml"   &lt;br /&gt;This "Deploy.xml" will hold all the necessary actions setup.exe will perform and will look something like:&lt;br /&gt;&lt;div style="border: 1pt solid rgb(204, 204, 204); padding-top: 1pt; padding-bottom: 1pt; background-color: rgb(245, 245, 245); background-image: none; background-repeat: repeat; background-attachment: scroll; overflow: auto; font-size: 10pt; width: 98%; color: black; font-family: courier new; height: 200px; line-height: 0.7em;"&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: maroon;"&gt;xml&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;version&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;1.0&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;encoding&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;utf-8&lt;/span&gt;"&lt;span style="color: blue;"&gt; ?&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Deploy&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;LogoImage&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;.\Logo.bmp&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;LogoImage&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;ShowOutputWindow&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;True&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;ShowOutputWindow&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;GenerateLogFile&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;True&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;GenerateLogFile&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;LogFileName&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Result.log&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;LogFileName&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Program&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;1&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Ping localhost...&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;Title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Command&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;ping&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;Command&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Parameters&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Parameter&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;localhost&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;Parameter&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;Parameters&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;IsConsoleApp&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;True&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;IsConsoleApp&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;ShowOutputInWindow&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;False&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;ShowOutputInWindow&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;GeneratesOutputErrorCode&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;True&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;GeneratesOutputErrorCode&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;IsShowStopper&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;True&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;IsShowStopper&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;Program&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;18&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Program&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;2&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Copy *.log&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;Title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Command&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;XCopy&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;Command&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;21&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Parameters&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;22&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Parameter&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;*.*&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;Parameter&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;23&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Parameter&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;d:\&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;Parameter&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;24&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;Parameters&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;25&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;IsConsoleApp&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;True&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;IsConsoleApp&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;26&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;ShowOutputInWindow&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;True&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;ShowOutputInWindow&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;27&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;GeneratesOutputErrorCode&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;True&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;GeneratesOutputErrorCode&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;28&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;IsShowStopper&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;True&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;IsShowStopper&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;29&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;Program&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;30&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;Deploy&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8359995441047908663-2283219989167114186?l=woutsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://woutsblog.blogspot.com/feeds/2283219989167114186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8359995441047908663&amp;postID=2283219989167114186' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default/2283219989167114186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8359995441047908663/posts/default/2283219989167114186'/><link rel='alternate' type='text/html' href='http://woutsblog.blogspot.com/2007/12/welcome.html' title='Welcome.♦'/><author><name>Wouter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
