<?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>Michael S. Clark</title>
	<atom:link href="http://www.ne0ge0.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ne0ge0.com</link>
	<description>When I talk, the world ignores me...</description>
	<lastBuildDate>Mon, 12 Dec 2011 15:44:39 +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>Fibre&#8217;s A-comin&#8217;!</title>
		<link>http://www.ne0ge0.com/2011/12/12/fibres-a-comin/</link>
		<comments>http://www.ne0ge0.com/2011/12/12/fibres-a-comin/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 15:44:39 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Interests]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.ne0ge0.com/?p=605</guid>
		<description><![CDATA[Further to the original rollout of FTTN, Arbroath is on the list of exchanges to be upgraded in 2012. w00t! [Via: BT Plc.]]]></description>
			<content:encoded><![CDATA[<p>Further to the original rollout of <a title="FTTN" href="http://en.wikipedia.org/wiki/FTTC#Fiber_to_the_node">FTTN</a>, Arbroath is on the list of exchanges to be upgraded in 2012.</p>
<p>w00t!</p>
<p>[<em>Via: <a title="BT Plc." href="http://www.btplc.com/News/Articles/Showarticle.cfm?ArticleID=5D490029-9378-46B1-922D-94A8F8F29AA9">BT Plc.</a></em>]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ne0ge0.com/2011/12/12/fibres-a-comin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reading SQL Server Timestamp Field Using PHP</title>
		<link>http://www.ne0ge0.com/2011/11/30/reading-sql-server-timestamp-field-using-php/</link>
		<comments>http://www.ne0ge0.com/2011/11/30/reading-sql-server-timestamp-field-using-php/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 15:53:04 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.ne0ge0.com/?p=597</guid>
		<description><![CDATA[I&#8217;ve been working on a project where I have to maintain data in a SQL Server database. In order to prevent different users updating the same data at the same time, I&#8217;ve also employed optimistic locking by using a &#8220;timestamp&#8221; field called OLToken on each table which is binary. This field is read out and [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working on a project where I have to maintain data in a SQL Server database. In order to prevent different users updating the same data at the same time, I&#8217;ve also employed <a href="http://en.wikipedia.org/wiki/Optimistic_locking" target="_blank">optimistic locking</a> by using a &#8220;timestamp&#8221; field called OLToken on each table which is binary. This field is read out and is used in any Insert and Update statements to ascertain if the record has been updated since the data was read out.</p>
<p>I&#8217;m using PHP to get each record. There isn&#8217;t much on the web about working with timestamp fields in PHP, so I created the function below to convert and store the OLToken as an integer:</p>
<pre class="brush: php; title: ; notranslate">
function ConvertOLToken ($theToken)
{
   $OLToken = &quot;&quot;;
   for ($i = 0; $i &lt; strlen ($theToken); $i++)
   {
      $Byte = dechex (ord ($theToken[$i]));
      $OLToken .= str_pad ($Byte, 2, &quot;0&quot;, STR_PAD_LEFT);
   }
   return hexdec($OLToken);
}
</pre>
<p>This value is passed back to stored procedures as an integer parameter and used in stored procedures:</p>
<pre class="brush: sql; title: ; notranslate">
IF EXISTS (
   SELECT 1
   FROM [Table]
   WHERE [ID] = @pID
      AND [OLToken] = CONVERT([binary](8), @pOLToken))
BEGIN
...
END
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.ne0ge0.com/2011/11/30/reading-sql-server-timestamp-field-using-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upgrading WordPress on NearlyFreeSpeech.net</title>
		<link>http://www.ne0ge0.com/2011/08/26/upgrading-wordpress-on-nearlyfreespeech-net/</link>
		<comments>http://www.ne0ge0.com/2011/08/26/upgrading-wordpress-on-nearlyfreespeech-net/#comments</comments>
		<pubDate>Fri, 26 Aug 2011 12:11:27 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Interests]]></category>
		<category><![CDATA[NearlyFreeSpeech]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.ne0ge0.com/?p=540</guid>
		<description><![CDATA[I ran into problems with the auto-upgrade facility of WordPress on my sites hosted here, on NearlyFreeSpeech.net. Through trial and error, I established the following works: Add the following lines to wp-config.php: Using PuTTY, log-in. Enter the following command: chgrp -R web *. This will change the group ownership of all files and directories to [...]]]></description>
			<content:encoded><![CDATA[<p>I ran into problems with the auto-upgrade facility of WordPress on my sites hosted here, on NearlyFreeSpeech.net.</p>
<p>Through trial and error, I established the following works:</p>
<ol>
<li>Add the following lines to <code>wp-config.php</code>:
<pre class="brush: php; title: ; notranslate">
define('FS_METHOD', 'direct');
define('FTP_BASE', '/public/');
define('FTP_CONTENT_DIR', '/public/wp-content/');
define('FTP_PLUGIN_DIR ', '/public/wp-content/plugins/');
define('FTP_USER', '---your username---');
define('FTP_HOST', 'ssh.phx.nearlyfreespeech.net:22');
define('FTP_PASS', '---your password---');
</pre>
</li>
<li>Using <a title="PuTTY Download Page" href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html" target="_blank">PuTTY</a>, log-in.</li>
<li>Enter the following command: <code>chgrp -R web *</code>. This will change the group ownership of all files and directories to <code>web</code>. This is the required ownership for WordPress to perform the upgrade.</li>
<li>Enter the following command: <code>chmod -R 777 *</code>. This will change the permissions on all files and directories to full public access.</li>
<li>Perform any WordPress upgrades; core, plugins or themes. It shouldn&#8217;t ask for any connection details.</li>
<li>Enter the following command: <code>find . -type d -print0 | xargs -0 chmod 755</code>. This will reset all directory permissions to read-only for everyone except the owner (you).</li>
<li>Enter the following command: <code>find . -type f -print0 | xargs -0 chmod 644</code>. This will reset all file permissions to read-only for everyone except the owner (you).</li>
<li>Enter the following command: <code>chmod -R 775 wp-content</code>. This will update the permissions on the <code>wp-content</code> directory to be 775, allowing uploads, including from the media library.</li>
</ol>
<p>You only have to do steps 1 and 3 once. Steps 4 to 8 have to be performed for upgrade.</p>
<p>Although not essential, the last three steps should be performed, as it is highly insecure to leave permissions set as public (777).</p>
<p>Also using SSH rather than FTP conforms with the view of NearlyFreeSpeech.net that FTP should not be used as passwords are transferred in plaintext.</p>
<p>Thanks to SNARP for the <a title="How to Get WordPress Working Under PHP safe_mode on NearlyFreeSpeech.net" href="http://snarp.dreamwidth.org/124165.html" target="_blank">original article</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ne0ge0.com/2011/08/26/upgrading-wordpress-on-nearlyfreespeech-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Find Text In Microsoft SQL Server Stored Procedures</title>
		<link>http://www.ne0ge0.com/2011/07/07/find-text-in-microsoft-sql-server-stored-procedures/</link>
		<comments>http://www.ne0ge0.com/2011/07/07/find-text-in-microsoft-sql-server-stored-procedures/#comments</comments>
		<pubDate>Thu, 07 Jul 2011 09:02:09 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.ne0ge0.com/?p=534</guid>
		<description><![CDATA[I recently had to perform a change on any stored procedures that contained a certain piece of text. Not knowing how to search for text across a database, I googled it and found the following small piece of useful code: [Via: ASP FAQ]]]></description>
			<content:encoded><![CDATA[<p>I recently had to perform a change on any stored procedures that contained a certain piece of text. Not knowing how to search for text across a database, I googled it and found the following small piece of useful code:</p>
<pre class="brush: sql; title: ; notranslate">
SELECT [ROUTINE_NAME], [ROUTINE_DEFINITION]
FROM [INFORMATION_SCHEMA].[ROUTINES]
WHERE [ROUTINE_DEFINITION] LIKE '%&amp;lt;insert_text_here&amp;gt;%'
AND [ROUTINE_TYPE] = 'PROCEDURE'
</pre>
<p>[<em>Via: <a title="ASP FAQ" href="http://databases.aspfaq.com/database/how-do-i-find-a-stored-procedure-containing-text.html">ASP FAQ</a></em>]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ne0ge0.com/2011/07/07/find-text-in-microsoft-sql-server-stored-procedures/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nope</title>
		<link>http://www.ne0ge0.com/2011/03/29/nope/</link>
		<comments>http://www.ne0ge0.com/2011/03/29/nope/#comments</comments>
		<pubDate>Tue, 29 Mar 2011 12:58:30 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Opinion]]></category>

		<guid isPermaLink="false">http://www.ne0ge0.com/?p=527</guid>
		<description><![CDATA[I did not brandish two knives outside a nightclub. Nor did I say &#8220;&#8216;Mon then! I&#8217;ll hae ye a&#8217;!&#8221;.]]></description>
			<content:encoded><![CDATA[<p>I did not <a title="Arbroath man brandished two kitchen knives outside nightclub" href="http://www.thecourier.co.uk/News/Angus/article/12326/arbroath-man-brandished-two-kitchen-knives-outside-nightclub.html">brandish two knives outside a nightclub</a>.</p>
<p>Nor did I say &#8220;&#8216;Mon then! I&#8217;ll hae ye a&#8217;!&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ne0ge0.com/2011/03/29/nope/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Streaming for Radio North Angus</title>
		<link>http://www.ne0ge0.com/2010/12/29/streaming-for-radio-north-angus/</link>
		<comments>http://www.ne0ge0.com/2010/12/29/streaming-for-radio-north-angus/#comments</comments>
		<pubDate>Wed, 29 Dec 2010 08:44:45 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Blog Add-ons]]></category>
		<category><![CDATA[Gadgets & Gizmos]]></category>
		<category><![CDATA[Interests]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.ne0ge0.com/?p=520</guid>
		<description><![CDATA[Radio North Angus, the independent local and healthcare radio service, has moved into the 21st century by having their broadcasting streaming on their website. The service, having had some teething troubles, is now fully functional with availability 24 hours a day. The transmission is fed from the desk at Arbroath Infirmary into a Barix Instreamer [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Radio North Angus" href="http://www.radionorthangus.co.uk">Radio North Angus</a>, the independent local and healthcare radio service, has moved into the 21st century by having their broadcasting streaming on their website.</p>
<p>The service, having had some teething troubles, is now fully functional with availability 24 hours a day.</p>
<p>The transmission is fed from the desk at Arbroath Infirmary into a <a title="Barix Instreamer 100" href="http://www.barix.com/Instreamer/301/">Barix Instreamer 100</a> (which is also used to trasmit the <a title="DAB" href="http://en.wikipedia.org/wiki/Digital_Audio_Broadcasting">DAB</a> service), and the streaming service itself is supplied by <a title="MixStream" href="http://www.mixstream.net">MixStream</a>. A very big thanks to the guys on the service desk who provided some much need support.</p>
<p>This is the first streaming service I have set-up, so hopefully it will be well received.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ne0ge0.com/2010/12/29/streaming-for-radio-north-angus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Bingo Simulator</title>
		<link>http://www.ne0ge0.com/2010/11/23/new-bingo-simulator/</link>
		<comments>http://www.ne0ge0.com/2010/11/23/new-bingo-simulator/#comments</comments>
		<pubDate>Tue, 23 Nov 2010 11:21:35 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Interests]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.ne0ge0.com/?p=517</guid>
		<description><![CDATA[I&#8217;ve just added a new Bingo simulator that we will be using with the Company Section. It&#8217;s written using jQuery, which I&#8217;m thoroughly enjoying; as is another larger project that I&#8217;m working on. More on that soon, but until then, have a look at the Bingo at let me know what you think&#8230;]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just added a new <a href="http://labs.ne0ge0.com/bingo">Bingo simulator</a> that we will be using with the <a href="http://www.facebook.com/#!/group.php?gid=117571678255239">Company Section</a>.</p>
<p>It&#8217;s written using jQuery, which I&#8217;m thoroughly enjoying; as is another larger project that I&#8217;m working on.</p>
<p>More on that soon, but until then, <a href="http://labs.ne0ge0.com/bingo">have a look at the Bingo</a> at let me know what you think&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ne0ge0.com/2010/11/23/new-bingo-simulator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DataGridView Flickering When Changing Background Colour</title>
		<link>http://www.ne0ge0.com/2010/08/04/datagridview-flickering-when-changing-background-colour/</link>
		<comments>http://www.ne0ge0.com/2010/08/04/datagridview-flickering-when-changing-background-colour/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 08:05:50 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Interests]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.ne0ge0.com/?p=511</guid>
		<description><![CDATA[Since implementing crossfading of tracks in Karaokidex, I&#8217;ve indicated the crossfading by gradually fading out the background colour of the first track&#8217;s row in the playlist DataGridView and fading in the background colour of the second track&#8217;s row. This caused a really annoying flickering. The problem is the DataGridView is not double-buffered by default, nor [...]]]></description>
			<content:encoded><![CDATA[<p>Since implementing crossfading of tracks in Karaokidex, I&#8217;ve indicated the crossfading by gradually fading out the background colour of the first track&#8217;s row in the playlist DataGridView and fading in the background colour of the second track&#8217;s row. This caused a really annoying flickering.</p>
<p>The problem is the DataGridView is not double-buffered by default, nor is there any visible property on the DataGridView object to set it as double-buffered.</p>
<p>Google to the rescue!</p>
<p>Thanks to the guys at StackOverflow.com for this elegant solution that uses reflection rather than defining a custom class.</p>
<pre class="brush: csharp; title: ; notranslate">
typeof(DataGridView).InvokeMember(
   &quot;DoubleBuffered&quot;,
   BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetProperty,
   null,
   myDataGridViewObject,
   new object[] { true });
</pre>
<p>[<em>Via: <a href="http://stackoverflow.com/questions/118528/horrible-redraw-performance-of-the-datagridview-on-one-of-my-two-screens">stackoverflow</a></em>]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ne0ge0.com/2010/08/04/datagridview-flickering-when-changing-background-colour/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Launching Single-Instance ClickOnce Apps From File Association</title>
		<link>http://www.ne0ge0.com/2010/08/02/launching-single-instance-clickonce-apps-from-file-association/</link>
		<comments>http://www.ne0ge0.com/2010/08/02/launching-single-instance-clickonce-apps-from-file-association/#comments</comments>
		<pubDate>Mon, 02 Aug 2010 08:30:44 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Interests]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.ne0ge0.com/?p=500</guid>
		<description><![CDATA[Since Service Pack 1 of Visual Studio 2008, setting file associations has never been easier. The publish options dialog has four pages; once of which is the &#8220;File Associations&#8221; page. After one or more entries has been added, and the app published, the ClickOnce app will now be launched whenever an associated file is opened [...]]]></description>
			<content:encoded><![CDATA[<p>Since Service Pack 1 of Visual Studio 2008, setting file associations has never been easier. The publish options dialog has four pages; once of which is the &#8220;File Associations&#8221; page. After one or more entries has been added, and the app published, the ClickOnce app will now be launched whenever an associated file is opened from explorer.</p>
<p>This is fine, unless you only want one instance of your app to be running at any one time. Each time an associated file is opened, a new instance of the ClickOnce app will be launched. If your single-instance app is open and you try to open an associated file, the reference to the file will be lost when the new instance detects that the original instance is running and terminates. Grrr.</p>
<p>However, you can get round this. After detecting that there is another instance of your app running, simply pass the file reference to the original instance before closing.</p>
<p>Note the callback is made using an IpcChannel rather than a TcpChannel. If a TcpChannel is specified, Vista and Windows 7 will require permission from the user to allow communication through the firewall.</p>
<p><a href="http://www.ne0ge0.com/wp-content/uploads/allow-program-windows-7-firewall-7-468x334.png"><img src="http://www.ne0ge0.com/wp-content/uploads/allow-program-windows-7-firewall-7-468x334-300x214.png" alt="" title="Firewall" width="300" height="214" class="aligncenter size-medium wp-image-506" /></a></p>
<p>Here is the code:</p>
<pre class="brush: csharp; title: ; notranslate">
            // Single instance checked
            bool IsFirstInstance;
            Mutex theMutex =
                new Mutex(false, &quot;Local\\&quot; + Application.ProductName, out IsFirstInstance);
            string[] theActivationData =
                AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData;

            if (IsFirstInstance)
            {
                IpcChannel theChannel =
                    new IpcChannel(Application.ProductName);

                try
                {
                    ChannelServices.RegisterChannel(theChannel, false);
                    RemotingServices.Marshal(this._MainView, &quot;MainView&quot;);

                    this.MainView_Show();

                    this.ConsumeLaunchParameters(theActivationData);

                    Application.Run(this._AppContext);
                }
                catch (SocketException) { }
                finally
                {
                    ChannelServices.UnregisterChannel(theChannel);
                }
            }
            else
            {
                if (null != theActivationData &amp;&amp;
                    theActivationData.Length &gt; 0)
                {
                    try
                    {
                        MainView theOriginalMainView =
                            (MainView)RemotingServices.Connect(
                                typeof(MainView),
                                &quot;ipc://&quot; + Application.ProductName + &quot;/MainView&quot;);

                        theOriginalMainView.ConsumeArguments(theActivationData);
                    }
                    catch (SocketException) { }
                }
            }

            theMutex.Close();
            Application.Exit();
</pre>
<p>Since my app uses a centralised controller system, I had to add the following code to the MainView form to pass the arguments back to the controller:</p>
<pre class="brush: csharp; title: ; notranslate">
        public void ConsumeArguments(
            string[] theArguments)
        {
            // Note that it is not allowed for non-UI thread to access
            // controls on the form, instead, we should use the Invoke method of the form
            // to execute a delegate on the UI thread that own's the control's underlying
            // windows handle.
            if (this.InvokeRequired)
            {
                this.Invoke(
                    new MethodCallback(ConsumeArguments),
                    new object[]
                        { theArguments });

                return;
            }
            else
            {
                if (null != this.ArgumentsConsumed)
                {
                    this.ArgumentsConsumed(theArguments);
                }
            }
        }

        public event MethodCallback ArgumentsConsumed;

        public delegate void MethodCallback(string[] args);
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.ne0ge0.com/2010/08/02/launching-single-instance-clickonce-apps-from-file-association/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Removing The Need For UACLauncher</title>
		<link>http://www.ne0ge0.com/2010/08/02/removing-the-need-for-uaclauncher/</link>
		<comments>http://www.ne0ge0.com/2010/08/02/removing-the-need-for-uaclauncher/#comments</comments>
		<pubDate>Mon, 02 Aug 2010 08:09:55 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Interests]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.ne0ge0.com/?p=496</guid>
		<description><![CDATA[Up &#8217;til now, when I&#8217;ve been developing and ClickOnce application, I&#8217;ve had to include a UACLauncher as a default option to support any user that is not the administrator on their own machine. The console app has elevated privileges that are passed on to the re-launched ClickOnce app. If I didn&#8217;t include this, the application [...]]]></description>
			<content:encoded><![CDATA[<p>Up &#8217;til now, when I&#8217;ve been developing and ClickOnce application, I&#8217;ve had to include a UACLauncher as a default option to support any user that is not the administrator on their own machine.</p>
<p><img class="aligncenter size-full wp-image-497" title="UACLauncher" src="http://www.ne0ge0.com/wp-content/uploads/UACLauncher.png" alt="UACLauncher" width="249" height="444" /></p>
<p>The console app has elevated privileges that are passed on to the re-launched ClickOnce app.</p>
<p>If I didn&#8217;t include this, the application would fail with (what I assumed was the first of many permissions errors) a registry access error. I decided to remove the UACLauncher and debug each error as it occurred. All my ClickOnce applications that require registry access to store settings store them in the LocalMachine hive. After googling the registry permission error, the main suggestion that came back was to move the settings to the CurrentUser hive.</p>
<p>Fair enough, but upon publishing the new version, there were no more errors. It seems that the only thing the app was doing that required administrator-level access was to attempt to write to the LocalMachine hive of the registry.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ne0ge0.com/2010/08/02/removing-the-need-for-uaclauncher/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

