<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://devlicio.us/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Rob Reynolds - The Fervent Coder : chocolatey</title><link>http://devlicio.us/blogs/rob_reynolds/archive/tags/chocolatey/default.aspx</link><description>Tags: chocolatey</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Chocolatey Automatic Packages</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2013/01/03/chocolatey-automatic-packages.aspx</link><pubDate>Thu, 03 Jan 2013 07:15:47 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:70751</guid><dc:creator>Rob Reynolds</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=70751</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=70751</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2013/01/03/chocolatey-automatic-packages.aspx#comments</comments><description>&lt;blockquote&gt;   &lt;p&gt;I updated three packages this morning. I didn’t even notice until the tweets came in from &lt;a href="http://twitter.com/chocolateynuget"&gt;@chocolateynuget&lt;/a&gt;.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;How is this possible? It’s simple. I love automation. I built &lt;a href="http://chocolatey.org"&gt;chocolatey&lt;/a&gt; to take advantage of automation. So it would make sense that we could automate checking for package updates and publishing those updated packages. These are known as &lt;a href="https://github.com/chocolatey/chocolatey/wiki/AutomaticPackages"&gt;automatic packages&lt;/a&gt;. Automatic packages are what set &lt;a href="http://chocolatey.org"&gt;Chocolatey&lt;/a&gt; apart from other package managers and I daresay could make chocolatey one of the most up-to-date package manager on Windows.&lt;/p&gt;  &lt;h4&gt;Automatic Packages You Say?&lt;/h4&gt;  &lt;p&gt;You’ve followed the instructions for creating a &lt;a href="https://github.com"&gt;Github&lt;/a&gt; (or really any source control) repository with your packages. All you need to do now is to introduce two new utilities to your personal library, &lt;a href="http://chocolatey.org/packages/ketarin"&gt;Ketarin&lt;/a&gt; and &lt;a href="http://chocolatey.org/packages/ChocolateyPackageUpdater"&gt;Chocolatey Package Updater&lt;/a&gt; (chocopkgup for short).&lt;/p&gt;  &lt;h4&gt;Ketarin&lt;/h4&gt;  &lt;p&gt;&lt;a href="http://chocolatey.org/packages/ketarin"&gt;Ketarin&lt;/a&gt; is a small application which automatically updates setup packages. As opposed to other tools, Ketarin is not meant to keep your system up-to-date, but rather maintain a compilation of all important setup packages which can be burned to disc or put on a USB stick. &lt;/p&gt;  &lt;p&gt;There are some good articles out there that talk about how to &lt;a href="http://wiki.ketarin.org/index.php?title=Basics"&gt;create&lt;/a&gt; &lt;a href="http://aproductivelife.blogspot.com/2010/03/using-ketarin-to-automatically-update.html"&gt;jobs&lt;/a&gt; with Ketarin so I am not going to go into that.&lt;/p&gt;  &lt;p&gt;Ketarin does a fantastic job of checking sites for updates and has hooks to give it custom command before and after it has downloaded the latest version of an app/tool.&lt;/p&gt;  &lt;h4&gt;Chocolatey Package Updater&lt;/h4&gt;  &lt;p&gt;&lt;a href="http://chocolatey.org/packages/ChocolateyPackageUpdater"&gt;Chocolatey Package Updater&lt;/a&gt; aka chocopkgup takes the information given out from Ketarin about a tool/app update and translates it into a chocolatey package that it builds and pushes to chocolatey.org. It does this so you don&amp;#39;t even have to think about updating a package or keeping it up to date. It just happens. Automatically, in the background, and even faster than you could make it happen. It&amp;#39;s almost as if you were the application/tool author.&lt;/p&gt;  &lt;h4&gt;How To&lt;/h4&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Prerequisites And Setup:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Optional (strongly recommended) - Ensure you are using a source control repository and file system for keeping packages. A good example is &lt;a href="https://github.com/ferventcoder/chocolateyautomaticpackages"&gt;here&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Optional (strongly recommended) - Make sure you have installed the chocolatey package templates. If you’ve installed the &lt;a href="https://github.com/chocolatey/chocolateytemplates"&gt;chocolatey templates&lt;/a&gt; (ReadMe has instructions), then all you need to do is take a look at the chocolateyauto and chocolateyauto3. You will note this looks almost exactly like the regular chocolatey template, except this has some specially named token values.       &lt;br /&gt;      &lt;br /&gt;      &lt;pre class="brush: ps;"&gt;#Items that could be replaced based on what you call chocopkgup.exe with
#{{PackageName}} - Package Name (should be same as nuspec file and folder) |/p
#{{PackageVersion}} - The updated version | /v
#{{DownloadUrl}} - The url for the native file | /u
#{{PackageFilePath}} - Downloaded file if including it in package | /pp
#{{PackageGuid}} - This will be used later | /pg
#{{DownloadUrlx64}} - The 64bit url for the native file | /u64&lt;/pre&gt;
  &lt;/li&gt;

  &lt;li&gt;These are the tokens that chocopkgup will replace when it generates an instance of a package. &lt;/li&gt;

  &lt;li&gt;Install chocopkgup (which will install ketarin and nuget.commandline). &lt;font face="Consolas"&gt;&lt;strong&gt;cinst chocolateypackageupdater&lt;/strong&gt;&lt;/font&gt;. &lt;/li&gt;

  &lt;li&gt;Check the config in C:\tools\ChocolateyPackageUpdater\chocopkgup.exe.config&amp;#160; (or chocolatey_bin_root/ChocolateyPackageUpdater). The &lt;strong&gt;PackagesFolder&lt;/strong&gt; key should point to where your repository is located. &lt;/li&gt;

  &lt;li&gt;Create a scheduled task (in windows). This is the command (edit the path to cmd.exe accordingly): &lt;font face="Consolas"&gt;&lt;strong&gt;C:\Windows\System32\cmd.exe /c c:\tools\chocolateypackageupdater\ketarinupdate.cmd&lt;/strong&gt;&lt;/font&gt; &lt;/li&gt;

  &lt;li&gt;Choose a schedule for the task. I run mine once a day but you can set it to run more often. Choose a time when the computer is not that busy. &lt;/li&gt;

  &lt;li&gt;Save this Ketarin template somewhere: &lt;a title="https://github.com/ferventcoder/chocolateyautomaticpackages/blob/master/_template/KetarinChocolateyTemplate.xml" href="https://github.com/ferventcoder/chocolateyautomaticpackages/blob/master/_template/KetarinChocolateyTemplate.xml"&gt;https://github.com/ferventcoder/chocolateyautomaticpackages/blob/master/_template/KetarinChocolateyTemplate.xml&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;Open Ketarin. Choose File –&amp;gt; Settings. &lt;/li&gt;

  &lt;li&gt;On the &lt;strong&gt;General Tab&lt;/strong&gt; we are going to add the Version Column for all jobs. Click Add…, then put Version in Column name and {version} in Column value.&amp;#160; &lt;br /&gt;&lt;strong&gt;&amp;#160;&amp;#160; &lt;img title="Create a custom Field (Ketarin)" alt="Create a Custom Field (Ketarin)" src="https://raw.github.com/wiki/chocolatey/chocolatey/images/chocopkgup/KetarinShowCustomField.png" /&gt;&lt;/strong&gt; &lt;/li&gt;

  &lt;li&gt;Click &lt;strong&gt;[OK]&lt;/strong&gt;. This should add it to the list of Custom Columns. &lt;/li&gt;

  &lt;li&gt;Click on the &lt;strong&gt;Commands Tab&lt;/strong&gt; and set &lt;strong&gt;Edit command for event&lt;/strong&gt; to “Before updating an application”.&amp;#160; &lt;img title="Woot woot!" alt="Ketarin settings - Commands Tab - Before updating an application" src="https://raw.github.com/wiki/chocolatey/chocolatey/images/chocopkgup/KetarinSettings.png" /&gt; &lt;/li&gt;

  &lt;li&gt;Add the following text: 
    &lt;pre class="brush: none;"&gt;chocopkgup /p {appname} /v {version} /u {preupdate-url} /u64 {url64} /pp {file} 
REM /disablepush&lt;/pre&gt;
  &lt;/li&gt;

  &lt;li&gt;Check the bottom of this section to be sure it set to &lt;strong&gt;Command&lt;/strong&gt;.&amp;#160; &lt;br /&gt;&lt;img title="Ketarin Command" alt="Command selected" src="https://raw.github.com/wiki/chocolatey/chocolatey/images/chocopkgup/KetarinCustomCommand.png" /&gt; &lt;/li&gt;

  &lt;li&gt;Click Okay. &lt;/li&gt;

  &lt;li&gt;Note the commented out /disablepush. This is so you can create a few packages and test that everything is working well before actually pushing those packages up to chocolatey. You may want to add that switch to the main command above it. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This gets Ketarin all set up with a global command for all packages we create. If you want to use Ketarin outside of chocolatey, all you need to do is remove the global setting for &lt;strong&gt;Before updating an application&lt;/strong&gt; and instead apply it to every job that pertains to chocolatey update.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Create an Automatic Package:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Preferably you are taking an existing package that you have tested and converting it to an automatic package.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Open Ketarin. Choose File –&amp;gt; Import…&amp;#160; &lt;/li&gt;

  &lt;li&gt;Choose the template you just saved earlier (KetarinChocolateyTemplate.xml). &lt;/li&gt;

  &lt;li&gt;Answer the questions. This will create a new job for Ketarin to check. &lt;/li&gt;

  &lt;li&gt;One important thing to keep in mind is that &lt;strong&gt;the name of the Application name needs to match the name of the package folder exactly&lt;/strong&gt;. &lt;/li&gt;

  &lt;li&gt;Right click on that new job and select Edit. Take a look at the following: 
    &lt;br /&gt;&lt;img title="Ketarin Job Information" alt="Ketarin Job Notes" src="https://raw.github.com/wiki/chocolatey/chocolatey/images/chocopkgup/KetarinMain.png" /&gt; &lt;/li&gt;

  &lt;li&gt;Set the URL appropriately. I would shy away from FileHippo for now, the URL has been known to change and if you upload that as the download url in a chocolatey packages, it won’t work very well. &lt;/li&gt;

  &lt;li&gt;Click on &lt;strong&gt;Variables&lt;/strong&gt; on the right of URL. 

    &lt;br /&gt;&lt;img title="Ketarin Variables" alt="Variables" src="https://raw.github.com/wiki/chocolatey/chocolatey/images/chocopkgup/KetarinSetVariables.png" /&gt; &lt;/li&gt;

  &lt;li&gt;On the left side you should see a variable for &lt;strong&gt;version&lt;/strong&gt; and one for &lt;strong&gt;url64&lt;/strong&gt;. Click on &lt;strong&gt;version&lt;/strong&gt;. &lt;/li&gt;

  &lt;li&gt;Choose the appropriate method for you. Here I’ve chosen &lt;strong&gt;Content from URL (start/end).&lt;/strong&gt; &lt;/li&gt;

  &lt;li&gt;Enter the URL for versioning information. 
    &lt;br /&gt;&lt;img title="Ketarin Variable Details" alt="Ketarin Variable Details" src="https://raw.github.com/wiki/chocolatey/chocolatey/images/chocopkgup/KetarinVariables.png" /&gt; &lt;/li&gt;

  &lt;li&gt;In the contents itself, highlight enough good information before a version to be able to select it uniquely during updates (but not so much it doesn’t work every time as the page changes). Click on &lt;strong&gt;Use selection as start&lt;/strong&gt;. &lt;/li&gt;

  &lt;li&gt;Now observe that it didn’t jump back too far. &lt;/li&gt;

  &lt;li&gt;Do the same with the ending part, keeping in mind that this side doesn’t need to be too much because it is found AFTER the start. Once selected click on &lt;strong&gt;Use selection as end&lt;/strong&gt;. &lt;/li&gt;

  &lt;li&gt;It should look somewhat similar to have is presented in the picture above. &lt;/li&gt;

  &lt;li&gt;If you have a 64bit Url you want to get, do the same for the url64 variable. &lt;/li&gt;

  &lt;li&gt;When all of this is good, click &lt;strong&gt;OK&lt;/strong&gt;. &lt;/li&gt;

  &lt;li&gt;Click &lt;strong&gt;OK&lt;/strong&gt; again. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Testing Ketarin/ChocoPkgUp: &lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;We need to get a good idea of whether this will work or not. &lt;/li&gt;

  &lt;li&gt;We’ve set &lt;strong&gt;/disablepush&lt;/strong&gt; in Ketarin global so that it only goes as far as creating packages. &lt;/li&gt;

  &lt;li&gt;Navigate to C:\ProgramData\chocolateypackageupdater. &lt;/li&gt;

  &lt;li&gt;Open Ketarin, find your job, and right click &lt;strong&gt;Update&lt;/strong&gt;.&amp;#160; If everything is set good, in moments you will have a chocolatey package in the chocopkgup folder.&amp;#160; &lt;/li&gt;

  &lt;li&gt;Inspect the resulting chocolatey package(s) for any issues. &lt;/li&gt;

  &lt;li&gt;You should also test the scheduled task works appropriately. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Troubleshooting/Notes&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Ketarin comes with a logging facility so you can see what it is doing. It’s under &lt;strong&gt;View&lt;/strong&gt; –&amp;gt; &lt;strong&gt;Show Log&lt;/strong&gt;. &lt;/li&gt;

  &lt;li&gt;In the top level folder for chocopkgup (in program data), we log what we receive from Ketarin as well and the process of putting together a package. &lt;/li&gt;

  &lt;li&gt;The name of the application in ketarin matches exactly that of the folder that is in the automatic packages folder. &lt;/li&gt;

  &lt;li&gt;Every once in awhile you want to look in Ketarin to see what jobs might be failing. Then figure out why. &lt;/li&gt;

  &lt;li&gt;Every once in awhile you will want to inspect the chocopkgupfolder to see if there are any packages that did not make it up for some reason or another and then upload them. &lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Conclusion&lt;/h4&gt;

&lt;p&gt;Automatic chocolatey packages are a great way to grow the number of packages you maintain without any significant jump in maintenance cost by you. I’ve been working with and using automatic packages for over six months. Is it perfect? No, it has issues from time to time (getting a good version read or actually publishing the packages in some rare cases). But it works pretty well. Over the coming months more features will be added to chocopkgup, such as been able to run its own PowerShell script (for downloading components to include in the package, etc) that would not end up in the final chocolatey package.&lt;/p&gt;

&lt;p&gt;With full automation instead of having packages that are out of date or no longer valid, you run the small chance that something changed in the install script or something no longer works. The chances of this are much, much lower than having packages that are out of date or no longer valid.&lt;/p&gt;

&lt;p&gt;It takes just a few minutes longer when creating packages to convert them to automatic packages but well worth it when you see that you are keeping applications and tools up to date on chocolatey without any additional effort on your part. Automatic packages are awesome! &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=70751" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/HowTo/default.aspx">HowTo</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/chocolatey/default.aspx">chocolatey</category></item><item><title>Chocolatey featured on LifeHacker!</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2012/09/12/chocolatey-featured-on-lifehacker.aspx</link><pubDate>Wed, 12 Sep 2012 14:44:21 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:70329</guid><dc:creator>Rob Reynolds</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=70329</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=70329</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2012/09/12/chocolatey-featured-on-lifehacker.aspx#comments</comments><description>&lt;p&gt;Chocolatey was just featured on LifeHacker! &lt;a title="http://lifehacker.com/5942417/chocolatey-brings-lightning-quick-linux+style-package-management-to-windows" href="http://lifehacker.com/5942417/chocolatey-brings-lightning-quick-linux+style-package-management-to-windows"&gt;http://lifehacker.com/5942417/chocolatey-brings-lightning-quick-linux+style-package-management-to-windows&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I was ecstatic to hear about this, of course now I need to write an actual comparison between chocolatey and other windows package managers.&lt;/p&gt;  &lt;p&gt;Comments on Reddit: &lt;a title="http://www.reddit.com/r/commandline/comments/zqnj6/chocolatey_brings_lightning_quick_linuxstyle/" href="http://www.reddit.com/r/commandline/comments/zqnj6/chocolatey_brings_lightning_quick_linuxstyle/"&gt;http://www.reddit.com/r/commandline/comments/zqnj6/chocolatey_brings_lightning_quick_linuxstyle/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=70329" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Tools/default.aspx">Tools</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Events/default.aspx">Events</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/News/default.aspx">News</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/chocolatey/default.aspx">chocolatey</category></item><item><title>Chocolatey - Guidance on Packaging Apps with Both an Install and Executable/Zip Option</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2012/02/25/chocolatey-guidance-on-packaging-apps-with-both-an-install-and-executable-zip-option.aspx</link><pubDate>Sat, 25 Feb 2012 17:35:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:69537</guid><dc:creator>Rob Reynolds</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=69537</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=69537</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2012/02/25/chocolatey-guidance-on-packaging-apps-with-both-an-install-and-executable-zip-option.aspx#comments</comments><description>&lt;p&gt;&lt;span&gt;One of the thoughts I&amp;#39;ve been considering recently with &lt;a href="http://chocolatey.org"&gt;chocolatey&lt;/a&gt; is consistency with packages and naming conventions as chocolatey continues to grow. It&amp;#39;s fine to name packages by the app/tool name, that&amp;#39;s both intuitive and expected. What I am more interested in is when an application has multiple installation options (ie. an MSI and a ZIP). It can become confusing for people to install these when they don&amp;#39;t know what they are getting if they call a package that has both. If you start with one that has a .zip and later they release an MSI (nodejs anyone?), what do you call the package that installs the MSI? Do you keep around the executable? Do you rename the original package in response to the other option? Is there a third option?&lt;/span&gt;
&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h4&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;One Option&lt;/span&gt;&lt;/strong&gt;&lt;/h4&gt;
&lt;div&gt;If there is only one option available, you are fine to make the package name the same as the application/tool. This makes it intuitive and reduces confusion.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;h4&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;Multiple Options&lt;/span&gt;&lt;/strong&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;To start putting together guidance on this and alleviate confusion, I see that we would move forward in these cases with three packages. One with no suffix, one with &amp;quot;.app&amp;quot; suffix, and one with &amp;quot;.tool&amp;quot; suffix. This brings in chocolatey&amp;#39;s idea of applications versus tools (
&lt;a href="https://github.com/chocolatey/chocolatey/wiki/ChocolateyFAQs"&gt;https://github.com/chocolatey/chocolatey/wiki/ChocolateyFAQs&lt;/a&gt;&amp;nbsp;- apps are installed on the system, tools are not).&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;div&gt;If you would take a quick look at Instant EyeDropper (
&lt;a href="http://chocolatey.org/packages?q=instanteyedropper"&gt;http://chocolatey.org/packages?q=instanteyedropper&lt;/a&gt;&amp;nbsp;), you will notice there are three packages here.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;InstantEyeDropper is what will ultimately be a virtual package&lt;/li&gt;
&lt;li&gt;InstantEyeDropper.app is the package name for a package that uses a native installer (i.e. MSI, exe)&lt;/li&gt;
&lt;li&gt;InstantEyeDropper.tool is the package name for a package that has an executable / downloads &amp;amp; unpacks an archive / etc&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;InstantEyeDropper&amp;nbsp;right now is taking a dependency on&amp;nbsp;
InstantEyeDropper.app (which makes it a meta package). When virtual packages (see Virtual Packages below) are ready, that dependency will be removed and the chocolateyinstall.ps1 file will look something like the following (this is not definitive of what it will look like though):&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;div&gt;&amp;nbsp;Install-VirtualPackage &amp;#39;7zip.tool&amp;#39; &amp;#39;7zip.app&amp;#39;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;You will notice I put the &amp;quot;.tool&amp;quot; ahead of &amp;quot;.app&amp;quot;. In the end, I think the behavior of a virtual package should default to a command line version. Why? There are folks that do not have administrative access to their machines. Chocolatey is really nice for them because they can install and use chocolatey without ever needing to assert administrative privileges. Marcel Hoyer (&lt;a href="https://twitter.com/#!/pixelplastic"&gt;https://twitter.com/pixelplastic&lt;/a&gt;) first proposed the idea of being able to use chocolatey without administrative privileges. Him and I took pains to make chocolatey work for these scenarios. This did complicate chocolatey a little bit for the package maker, but in the end I think it is a really good thing. As a person inspecting a package to decide whether to install or not, they can see every point that the package maker mentioned they needed administrative privileges.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;That said, the default will be the one on the leftmost side. You are beholden to the community in justifying why you didn&amp;#39;t put the command line version first if you decide not to in the virtual package.&amp;nbsp;&lt;span&gt;But chocolatey won&amp;#39;t constrain you on that because you may have a really good reason.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;h4&gt;&lt;span style="text-decoration:underline;"&gt;App Now has Multiple Options&lt;/span&gt;&lt;/h4&gt;
&lt;div&gt;When an application/tool moves to where it has multiple options, like an installer it didn&amp;#39;t used to have, that&amp;#39;s when it is time to break the package out to a virtual (meta for now until virtual is available) and create the other two packages with the correct suffixes as outlined in the guidance above.&lt;/div&gt;
&lt;h4&gt;&lt;span style="text-decoration:underline;"&gt;Virtual Packages&lt;/span&gt;&lt;/h4&gt;
&lt;div&gt;For those confused about the idea of a virtual package, it allows folks to say I need to take a dependency on a PDFReader. PDFReader becomes a virtual package that does nothing other than point to all of the different pdf readers available. When someone installs the package that has a dependency on PDFReader, chocolatey looks at the virtual options and sees you have adobereader installed (one of the options in the list). So it moves on because you have met the virtual package requirements. If you have foxitreader installed, it moves on. Otherwise it picks the first item in the virtual tree and installs it as the default. More information?&amp;nbsp;&lt;a href="https://github.com/chocolatey/chocolatey/issues/7"&gt;https://github.com/chocolatey/chocolatey/issues/7&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;h4&gt;&lt;span style="text-decoration:underline;"&gt;Virtual Packages vs Meta Packages&lt;/span&gt;&lt;/h4&gt;
&lt;div&gt;A meta package is one that points to other packages. If you think of a package that does nothing more than take on dependencies to other packages, that is a meta package. A virtual package is like a meta package, except it has the concept of optional dependencies.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;h4&gt;&lt;span style="text-decoration:underline;"&gt;Ending Thoughts&lt;/span&gt;&lt;/h4&gt;
&lt;div&gt;This seems to be on the surface the best way to provide an intuitive user experience. There may be some things we learn along the way and adjust this as we go.&amp;nbsp;If you are a package owner and you have packages that have both options, you may want to start getting them into this format. I myself have some work to do in this aspect.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;Thoughts?&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;Original Discussion:&amp;nbsp;&lt;a href="http://groups.google.com/group/chocolatey/browse_thread/thread/a1d208b022dfc30f"&gt;http://groups.google.com/group/chocolatey/browse_thread/thread/a1d208b022dfc30f&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=69537" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/HowTo/default.aspx">HowTo</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Tools/default.aspx">Tools</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/.NET/default.aspx">.NET</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/NuGet/default.aspx">NuGet</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/chocolatey/default.aspx">chocolatey</category></item></channel></rss>