<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The GITS Blog &#187; inno</title>
	<atom:link href="http://ginstrom.com/scribbles/tag/inno/feed/" rel="self" type="application/rss+xml" />
	<link>http://ginstrom.com/scribbles</link>
	<description>Random scribbling about programming, translation, and Japan</description>
	<lastBuildDate>Wed, 20 Apr 2011 05:09:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Inno Setup: Determining the data directory at install time</title>
		<link>http://ginstrom.com/scribbles/2009/04/08/inno-setup-determining-the-data-directory-at-install-time/</link>
		<comments>http://ginstrom.com/scribbles/2009/04/08/inno-setup-determining-the-data-directory-at-install-time/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 12:28:14 +0000</pubDate>
		<dc:creator>Ryan Ginstrom</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[app data]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[compiler]]></category>
		<category><![CDATA[custom]]></category>
		<category><![CDATA[dynamic]]></category>
		<category><![CDATA[inno]]></category>

		<guid isPermaLink="false">http://ginstrom.com/scribbles/?p=961</guid>
		<description><![CDATA[Inno Setup is a fantastic and free application for creating Windows setup programs. It takes so much of the hassle out of the process that it's almost fun. I recently needed to extend Inno Setup with a custom code section: I needed to install the program's data to the Common App Data folder or the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jrsoftware.org/isinfo.php">Inno Setup</a> is a fantastic and free application for creating Windows setup programs. It takes so much of the hassle out of the process that it's <em>almost</em> fun.</p>
<p>I recently needed to extend Inno Setup with a custom code section: I needed to install the program's data to the Common App Data folder or the Local App Data folder, depending on a selection made during the installation process (install for all users, or just me). Here's the script I came up with:</p>
<div class="dean_ch" style="white-space: wrap;">
; AppDataTest.<span class="me1">iss</span><br />
<span class="br0">&#91;</span><span class="kw1">Setup</span><span class="br0">&#93;</span><br />
<span class="kw3">AppName</span>=AppData Test<br />
<span class="kw3">AppVerName</span>=AppData Test <span class="nu0">0.1</span><br />
<span class="kw3">DefaultDirName</span>=<span class="br0">&#123;</span><span class="kw1">pf</span><span class="br0">&#125;</span>\AppDataTest<br />
<span class="kw3">DefaultGroupName</span>=AppDataTest<br />
<span class="kw3">OutputDir</span>=<span class="kw1">Setup</span></p>
<p><span class="br0">&#91;</span><span class="kw1">Files</span><span class="br0">&#93;</span><br />
<span class="kw3">Source</span>: AppDataTest.<span class="me1">iss</span>; &nbsp;<span class="kw3">DestDir</span>: <span class="br0">&#123;</span><span class="kw1">app</span><span class="br0">&#125;</span>\;<br />
<span class="kw3">Source</span>: AppDataTest.<span class="me1">iss</span>; &nbsp;<span class="kw3">DestDir</span>: <span class="br0">&#123;</span>code:DefAppDataFolder<span class="br0">&#125;</span>\Test\;</p>
<p><span class="br0">&#91;</span><span class="kw1">Tasks</span><span class="br0">&#93;</span><br />
<span class="kw3">Name</span>: common; <span class="kw3">Description</span>: <span class="st0">&quot;&amp;All users&quot;</span>; <span class="kw3">GroupDescription</span>: <span class="st0">&quot;Install For:&quot;</span>; <span class="kw3">Flags</span>: <span class="kw2">exclusive</span> <span class="kw2">unchecked</span><br />
<span class="kw3">Name</span>: local; &nbsp;<span class="kw3">Description</span>: <span class="st0">&quot;Just &amp;me&quot;</span>; <span class="kw3">GroupDescription</span>: <span class="st0">&quot;Install For:&quot;</span>; <span class="kw3">Flags</span>: <span class="kw2">exclusive</span></p>
<p><span class="br0">&#91;</span><span class="kw1">Icons</span><span class="br0">&#93;</span><br />
<span class="kw3">Name</span>: <span class="br0">&#123;</span><span class="kw1">group</span><span class="br0">&#125;</span>\Uninstall AppDataTest; <span class="kw3">Filename</span>: <span class="br0">&#123;</span>uninstallexe<span class="br0">&#125;</span></p>
<p><span class="br0">&#91;</span>Code<span class="br0">&#93;</span><br />
<span class="kw2">function</span> DefAppDataFolder<span class="br0">&#40;</span>Param: <span class="kw4">String</span><span class="br0">&#41;</span>: <span class="kw4">String</span>;<br />
<span class="kw2">begin</span><br />
&nbsp; <span class="kw2">if</span> IsTaskSelected<span class="br0">&#40;</span><span class="st0">'common'</span><span class="br0">&#41;</span> <span class="kw2">then</span><br />
&nbsp; &nbsp; Result := ExpandConstant<span class="br0">&#40;</span><span class="st0">'{commonappdata}'</span><span class="br0">&#41;</span><br />
&nbsp; <span class="kw2">else</span><br />
&nbsp; &nbsp; Result := ExpandConstant<span class="br0">&#40;</span><span class="st0">'{localappdata}'</span><span class="br0">&#41;</span><br />
<span class="kw2">end</span>;</div>
<p>I created a radio button for the [Tasks] page, asking whether the user wants to install the application for all users, or just herself.</p>
<p>Then in the [Code] section, I created a function to expand "DefAppDataFolder" to <code>commonappdata</code> or <code>localappdata</code>, depending on whether "common" or "local" is selected in in the [Tasks] section (<code>IsTaskSelected('common')</code>).</p>
<p>This value is then expanded in the [Files] section, at this line:</p>
<div class="dean_ch" style="white-space: wrap;">
<span class="kw3">Source</span>: AppDataTest.<span class="me1">iss</span>; &nbsp;<span class="kw3">DestDir</span>: <span class="br0">&#123;</span>code:DefAppDataFolder<span class="br0">&#125;</span>\Test\;</div>
<p>Here's the <a href="/code/AppDataTest/AppDataTest.iss" title="AppDataTest.iss">setup script (AppDataTest.iss)</a>, and the resulting <a href="/code/AppDataTest/setup.exe" title="setup.exe">setup program (setup.exe)</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ginstrom.com/scribbles/2009/04/08/inno-setup-determining-the-data-directory-at-install-time/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

