<?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"
	>

<channel>
	<title>bschwehn</title>
	<atom:link href="http://bschwehn.de/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://bschwehn.de/blog</link>
	<description></description>
	<pubDate>Wed, 24 Sep 2008 00:49:50 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<item>
		<title>Building detours with the VS 2008 compiler and 6.1/Server 2008 SDK</title>
		<link>http://bschwehn.de/blog/?p=16</link>
		<comments>http://bschwehn.de/blog/?p=16#comments</comments>
		<pubDate>Tue, 23 Sep 2008 23:43:57 +0000</pubDate>
		<dc:creator>ben</dc:creator>
		
		<category><![CDATA[c/c++]]></category>

		<category><![CDATA[dev]]></category>

		<guid isPermaLink="false">http://bschwehn.de/blog/?p=16</guid>
		<description><![CDATA[&#160;
There are a couple of potential problems you may run into when trying to build detours using the VS 2008 SDK 6.1 tools and headers:

on an x64 system the make file will default to building for x64, which is disabled in the free version. To build for x64 you must get a license from Microsoft [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>There are a couple of potential problems you may run into when trying to build <a href="http://research.microsoft.com/sn/detours/">detours</a> using the VS 2008 SDK 6.1 tools and headers:</p>
<ul>
<li>on an x64 system the make file will default to building for x64, which is disabled in the free version. To build for x64 you must <a href="http://www.microsoft.com/iplicensing/productDetail.aspx?productTitle=Detours">get a license from Microsoft for $10000</a> &#8212; most likely you just want to build the x86 version though. You can configure building to x86 by setting an environment variable:&nbsp; </p>
<div class="csharpcode">
<pre class="alt">set DETOURS_TARGET_PROCESSOR=x86</pre>
</div>
<div class="csharpcode">&nbsp; </p>
</div>
<li>your lib and include paths might not be set correctly, I recommend setting both to first the SDKs directory, then the VS directory like:
<div class="csharpcode">
<pre class="alt">set lib=C:\Program Files\Microsoft SDKs\Windows\v6.1\Lib;C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib</pre>
<pre>&nbsp;</pre>
<pre class="alt">set include=C:\Program Files\Microsoft SDKs\Windows\v6.1\Include;C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include</pre>
</div>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<div class="csharpcode">&nbsp; <br />&nbsp;</div>
<li>When you do a “nmake all” now, detours itself should build, but the compilation of the samples will abort with an error:
<p></p>
<div class="csharpcode">
<pre class="alt">symtest.cpp(270) : error C2664: 'BOOL (HANDLE,PSYM_ENUMMODULES_CALLBACK64,PVOID)' :</pre>
<pre> cannot convert parameter 2 from 'overloaded-function' to 'PSYM_ENUMMODULES_CALLBACK64'</pre>
<pre class="alt">of the functions with this name in scope match the target type</pre>
<pre>NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\cl.EXE"' :</pre>
<pre class="alt"> return code 0x2'</pre>
<pre>Stop.</pre>
<pre class="alt">NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\nmake.exe"' : return code '0x2'</pre>
<pre>Stop.</pre>
<pre class="alt">NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\nmake.exe"' : return code '0x2'</pre>
<pre>Stop.</pre>
</div>
<p><a href="http://research.microsoft.com/~austind/">Austin Donnelly</a> <a href="http://social.msdn.microsoft.com/forums/en-US/vcgeneral/thread/fcb5a809-5404-481f-82c0-40ffa6f58c9b/">has posted a patch for this problem</a>, you’ll need to patch two files, first samples/findfunc/symtest.cpp: </p>
<p>
<pre></pre>
<div class="csharpcode">&nbsp; <br />&nbsp;
<pre class="alt">Index: symtest.cpp</pre>
<pre>===================================================================</pre>
<pre class="alt">--- symtest.cpp    (revision 1)</pre>
<pre>+++ symtest.cpp    (revision 2)</pre>
<pre class="alt">@@ -80,7 +80,7 @@</pre>
<pre> <span class="rem">//////////////////////////////////////////////////////////////////////////////</span></pre>
<pre class="alt"> <span class="rem">//</span></pre>
<pre> <span class="preproc">#if</span> (_MSC_VER &gt; 1299)</pre>
<pre class="alt">-<span class="kwrd">static</span> BOOL WINAPI SymEnumerateCallback(PSTR pszModule,</pre>
<pre>+<span class="kwrd">static</span> BOOL WINAPI SymEnumerateCallback(PCSTR  pszModule,</pre>
<pre class="alt">                                         DWORD64 <span class="kwrd">base</span>,</pre>
<pre>                                         PVOID pvUserContext)</pre>
<pre class="alt"> {</pre>
</div>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<pre>

Second samples/traceapi/_win32.cpp: 

</pre>
<div class="csharpcode">
<pre class="alt">Index: _win32.cpp</pre>
<pre>===================================================================</pre>
<pre class="alt">--- _win32.cpp    (revision 1)</pre>
<pre>+++ _win32.cpp    (revision 2)</pre>
<pre class="alt">@@ -389,7 +389,7 @@</pre>
<pre>     = CharUpperW;</pre>
<pre class="alt"> </pre>
<pre> BOOL (__stdcall * Real_CheckColorsInGamut)(HDC a0,</pre>
<pre class="alt">-                                           LPVOID a1,</pre>
<pre>+                                           LPRGBTRIPLE  a1,</pre>
<pre class="alt">                                            LPVOID a2,</pre>
<pre>                                            DWORD a3)</pre>
<pre class="alt">     = CheckColorsInGamut;</pre>
<pre>@@ -5979,7 +5979,7 @@</pre>
<pre class="alt">                                      LPVOID a1,</pre>
<pre>                                      DWORD a2,</pre>
<pre class="alt">                                      LPDWORD a3,</pre>
<pre>-                                     LPVOID a4)</pre>
<pre class="alt">+                                     PCONSOLE_READCONSOLE_CONTROL a4)</pre>
<pre>     = ReadConsoleA;</pre>
<pre class="alt"> </pre>
<pre> BOOL (__stdcall * Real_ReadConsoleInputA)(HANDLE a0,</pre>
<pre class="alt">@@ -6033,7 +6033,7 @@</pre>
<pre>                                      LPVOID a1,</pre>
<pre class="alt">                                      DWORD a2,</pre>
<pre>                                      LPDWORD a3,</pre>
<pre class="alt">-                                     LPVOID a4)</pre>
<pre>+                                     PCONSOLE_READCONSOLE_CONTROL a4)</pre>
<pre class="alt">     = ReadConsoleW;</pre>
<pre> </pre>
<pre class="alt"> BOOL (__stdcall * Real_ReadDirectoryChangesW)(HANDLE a0,</pre>
<pre>@@ -7373,8 +7373,8 @@</pre>
<pre class="alt">                                              LPFILETIME a1)</pre>
<pre>     = SystemTimeToFileTime;</pre>
<pre class="alt"> </pre>
<pre>-BOOL (__stdcall * Real_SystemTimeToTzSpecificLocalTime)(LPTIME_ZONE_INFORMATION a0,</pre>
<pre class="alt">-                                                        LPSYSTEMTIME a1,</pre>
<pre>+BOOL (__stdcall * Real_SystemTimeToTzSpecificLocalTime)(<span class="kwrd">const</span> TIME_ZONE_INFORMATION* a0,</pre>
<pre class="alt">+                                                        <span class="kwrd">const</span> SYSTEMTIME *a1,</pre>
<pre>                                                         LPSYSTEMTIME a2)</pre>
<pre class="alt">     = SystemTimeToTzSpecificLocalTime;</pre>
<pre> </pre>
<pre class="alt">@@ -7638,7 +7638,8 @@</pre>
<pre> </pre>
<pre class="alt"> BOOL (__stdcall * Real_UpdateColors)(HDC a0)</pre>
<pre>     = UpdateColors;</pre>
<pre class="alt">-</pre>
<pre>+#pragma warning(push)</pre>
<pre class="alt">+#pragma warning(disable:4995)</pre>
<pre> BOOL (__stdcall * Real_UpdateICMRegKeyA)(DWORD a0,</pre>
<pre class="alt">                                          LPSTR a1,</pre>
<pre>                                          LPSTR a2,</pre>
<pre class="alt">@@ -7658,7 +7659,7 @@</pre>
<pre>                                         LPVOID a4,</pre>
<pre class="alt">                                         DWORD a5)</pre>
<pre>     = UpdateResourceA;</pre>
<pre class="alt">-</pre>
<pre>+#pragma warning(pop)</pre>
<pre class="alt"> BOOL (__stdcall * Real_UpdateResourceW)(HANDLE a0,</pre>
<pre>                                         LPCWSTR a1,</pre>
<pre class="alt">                                         LPCWSTR a2,</pre>
<pre>@@ -9709,7 +9710,7 @@</pre>
<pre class="alt"> }</pre>
<pre> </pre>
<pre class="alt"> BOOL __stdcall Mine_CheckColorsInGamut(HDC a0,</pre>
<pre>-                                       LPVOID a1,</pre>
<pre class="alt">+                                       LPRGBTRIPLE a1,</pre>
<pre>                                        LPVOID a2,</pre>
<pre class="alt">                                        DWORD a3)</pre>
<pre> {</pre>
<pre class="alt">@@ -26018,7 +26019,7 @@</pre>
<pre>                                  LPVOID a1,</pre>
<pre class="alt">                                  DWORD a2,</pre>
<pre>                                  LPDWORD a3,</pre>
<pre class="alt">-                                 LPVOID a4)</pre>
<pre>+                                 PCONSOLE_READCONSOLE_CONTROL a4)</pre>
<pre class="alt"> {</pre>
<pre>     _PrintEnter(<span class="str">"ReadConsoleA(%p,%p,%p,%p,%p)\n"</span>, a0, a1, a2, a3, a4);</pre>
<pre class="alt"> </pre>
<pre>@@ -26152,7 +26153,7 @@</pre>
<pre class="alt">                                  LPVOID a1,</pre>
<pre>                                  DWORD a2,</pre>
<pre class="alt">                                  LPDWORD a3,</pre>
<pre>-                                 LPVOID a4)</pre>
<pre class="alt">+                                 PCONSOLE_READCONSOLE_CONTROL a4)</pre>
<pre> {</pre>
<pre class="alt">     _PrintEnter(<span class="str">"ReadConsoleW(%p,%p,%p,%p,%p)\n"</span>, a0, a1, a2, a3, a4);</pre>
<pre> </pre>
<pre class="alt">@@ -30240,8 +30241,9 @@</pre>
<pre>     <span class="kwrd">return</span> rv;</pre>
<pre class="alt"> }</pre>
<pre> </pre>
<pre class="alt">-BOOL __stdcall Mine_SystemTimeToTzSpecificLocalTime(LPTIME_ZONE_INFORMATION a0,</pre>
<pre>-                                                    LPSYSTEMTIME a1,</pre>
<pre class="alt">+BOOL __stdcall Mine_SystemTimeToTzSpecificLocalTime(<span class="kwrd">const</span> TIME_ZONE_INFORMATION</pre>
<pre>+ * a0,</pre>
<pre class="alt">+                                                    <span class="kwrd">const</span> SYSTEMTIME * a1,</pre>
<pre>                                                     LPSYSTEMTIME a2)</pre>
<pre class="alt"> {</pre>
<pre>     _PrintEnter(<span class="str">"SystemTimeToTzSpecificLocalTime(%p,%p,%p)\n"</span>, a0, a1, a2);</pre>
</div>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>After you applied those two patches, “nmake all” should successfully build detours and all the samples. </p>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://bschwehn.de/blog/?feed=rss2&amp;p=16</wfw:commentRss>
		</item>
		<item>
		<title>MSI setup: how to do a sql server connection test</title>
		<link>http://bschwehn.de/blog/?p=8</link>
		<comments>http://bschwehn.de/blog/?p=8#comments</comments>
		<pubDate>Tue, 16 Oct 2007 19:27:12 +0000</pubDate>
		<dc:creator>bschwehn</dc:creator>
		
		<category><![CDATA[WiX]]></category>

		<category><![CDATA[MSI]]></category>

		<category><![CDATA[setup]]></category>

		<guid isPermaLink="false">http://benschwehn.wordpress.com/2007/10/16/msi-setup-how-to-do-a-sql-server-connection-test-2/</guid>
		<description><![CDATA[The WiX (Windows Installer XML) toolset is a collection of open source tools that assists the creation of MSI installations.    It includes a collection of custom actions that (among other things) allow including a sql database setup in your installation.    Setting up a database is quite simple:


DropOnReinstall=&#34;no&#34; Server=&#34;[SQLSERVERNAME]&#34; Database [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://wix.sourceforge.net/">WiX (Windows Installer XML)</a> toolset is a collection of open source tools that assists the creation of <a href="http://en.wikipedia.org/wiki/Windows_Installer">MSI</a> installations.    <br />It includes a collection of <a href="http://msdn2.microsoft.com/en-us/library/aa368066.aspx">custom actions</a> that (among other things) allow including a sql database setup in your installation.    <br />Setting up a database is quite simple:</p>
<p><sql:sqldatabase id="DataBaseSetup" ><br droponuninstall="no" confirmoverwrite="yes" createoninstall="yes" /></p>
<div class="csharpcode">
<pre class="alt">DropOnReinstall=<span class="str">&quot;no&quot;</span> Server=<span class="str">&quot;[SQLSERVERNAME]&quot;</span> Database =<span class="str">&quot;[SQLSERVERDATABASENAME]&quot;</span>&gt;</pre>
</div>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>
  <br /><sql:sqlscript id="installScriptIntegrated" executeoninstall="yes" binarykey="SqlInstallScript" /><binary id="SqlInstallScript" sourcefile="binary\createdb.sql" /></p>
<p>Note that the server and database name are variables. They are filled in by the user during the GUI part of the installation.</p>
<p>Unfortunately, no custom action is provided that would allow you to do a connection test before actually executing the sql custom action. If the user makes a typo, the custom action will fail at install time and the entire installation is rolled back.</p>
<p>As this is not really acceptable, I&#8217;ve written a C++ custom action that does a connection test. With this custom action I can test the user provided credentials before the actual installation starts – and provide feedback if the credentials are incorrect.<br />
  <br />Using the code and libraries that come with WiX, writing the custom action was really quite simple:</p>
<p>&#160;</p>
<div class="csharpcode">
<pre class="alt">#include </pre>
<pre>#include </pre>
<pre class="alt">#include </pre>
<pre>#include <span class="str">&quot;wcautil.h&quot;</span></pre>
<pre class="alt">#include <span class="str">&quot;dutil.h&quot;</span></pre>
<pre>#include <span class="str">&quot;sqlutil.h&quot;</span></pre>
<pre class="alt">#include <span class="str">&quot;strutil.h&quot;</span></pre>
<pre>&#160;</pre>
<pre class="alt"><span class="kwrd">void</span> ReleaseString(LPWSTR psz) {</pre>
<pre><span class="kwrd">if</span>(psz) {</pre>
<pre class="alt">StrFree(psz);</pre>
<pre>}</pre>
<pre class="alt">}</pre>
<pre>&#160;</pre>
<pre class="alt"><span class="kwrd">extern</span> <span class="str">&quot;C&quot;</span> UINT __stdcall CheckSqlConnection(MSIHANDLE hInstall) {</pre>
<pre>LPWSTR pszDbName = NULL;</pre>
<pre class="alt">LPWSTR pszServerName = NULL;</pre>
<pre>LPWSTR pszUserName = NULL;</pre>
<pre class="alt">LPWSTR pszAuthentificationMode = NULL;</pre>
<pre>LPWSTR pszPassword = NULL;</pre>
<pre class="alt">BOOL integratedMode = FALSE;</pre>
<pre>&#160;</pre>
<pre class="alt">HRESULT hr = WcaInitialize(hInstall, <span class="str">&quot;CheckSqlConnection&quot;</span>);</pre>
<pre>ExitOnFailure(hr, <span class="str">&quot;Failed to initialize&quot;</span>);</pre>
<pre class="alt">&#160;</pre>
<pre>hr = WcaSetProperty(L<span class="str">&quot;SQLCONNECTIONTESTRESULT&quot;</span>, L<span class="str">&quot;Not checked&quot;</span>);</pre>
<pre class="alt">ExitOnFailure(hr, <span class="str">&quot;Failed to set property&quot;</span>);</pre>
<pre>&#160;</pre>
<pre class="alt">hr = WcaGetProperty(L<span class="str">&quot;SQLSERVERDATABASENAME&quot;</span>, &amp;pszDbName);</pre>
<pre>ExitOnFailure(hr, <span class="str">&quot;Failed to get property&quot;</span>);</pre>
<pre class="alt">&#160;</pre>
<pre>hr = WcaGetProperty(L<span class="str">&quot;SQLSERVERNAME&quot;</span>, &amp;pszServerName);</pre>
<pre class="alt">ExitOnFailure(hr, <span class="str">&quot;Failed to get property&quot;</span>);</pre>
<pre>&#160;</pre>
<pre class="alt">hr = WcaGetProperty(L<span class="str">&quot;SQLSERVERUSERNAME&quot;</span>, &amp;pszUserName);</pre>
<pre>ExitOnFailure(hr, <span class="str">&quot;Failed to get property&quot;</span>);</pre>
<pre class="alt">&#160;</pre>
<pre>hr = WcaGetProperty(L<span class="str">&quot;SQLSERVERAUTHENTIFICATIONMODE&quot;</span>, &amp;pszAuthentificationMode);</pre>
<pre class="alt">ExitOnFailure(hr, <span class="str">&quot;Failed to get property&quot;</span>);</pre>
<pre>&#160;</pre>
<pre class="alt">integratedMode = wcscmp(pszAuthentificationMode, L<span class="str">&quot;1&quot;</span>) == 0;</pre>
<pre>&#160;</pre>
<pre class="alt">hr = WcaGetProperty(L<span class="str">&quot;SQLSERVERPASSWORD&quot;</span>, &amp;pszPassword);</pre>
<pre>ExitOnFailure(hr, <span class="str">&quot;Failed to get property&quot;</span>);</pre>
<pre class="alt">&#160;</pre>
<pre>IDBCreateSession* sessionId;</pre>
<pre class="alt">hr = SqlConnectDatabase(pszServerName, L<span class="str">&quot;&quot;</span>, L<span class="str">&quot;master&quot;</span>, integratedMode, pszUserName, pszPassword, &amp;sessionId);</pre>
<pre>&#160;</pre>
<pre class="alt"><span class="kwrd">if</span> (hr == ERROR_SUCCESS) {</pre>
<pre>hr = WcaSetProperty(L<span class="str">&quot;SQLCONNECTIONTESTRESULT&quot;</span>, L<span class="str">&quot;1&quot;</span>);</pre>
<pre class="alt">ExitOnFailure(hr, <span class="str">&quot;Failed to set property&quot;</span>);</pre>
<pre>}</pre>
<pre class="alt"><span class="kwrd">else</span> {</pre>
<pre>hr = WcaSetProperty(L<span class="str">&quot;SQLCONNECTIONTESTRESULT&quot;</span>, L<span class="str">&quot;0&quot;</span>);</pre>
<pre class="alt">ExitOnFailure(hr, <span class="str">&quot;Failed to set property&quot;</span>);</pre>
<pre>}</pre>
<pre class="alt">&#160;</pre>
<pre>LExit:</pre>
<pre class="alt">ReleaseString(pszDbName);</pre>
<pre>ReleaseString(pszServerName);</pre>
<pre class="alt">ReleaseString(pszUserName);</pre>
<pre>ReleaseString(pszAuthentificationMode);</pre>
<pre class="alt">ReleaseString(pszPassword);</pre>
<pre><span class="kwrd">return</span> WcaFinalize(hr);</pre>
<pre class="alt">}</pre>
<pre>&#160;</pre>
</div>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>You have to export the CheckSqlConnection method (e.g. by using an exports.def file) and link with msi.lbi (comes with the windows sdk) and the WiX libraries dutil.lib and wcautil.lib.</p>
<p>In my setup GUI I&#8217;ve included a dialog that allows entering the sql credentials and do a connection test (note: <a href="http://www.icsharpcode.net/OpenSource/SD/">SharpDevelop</a> comes with a handy GUI designer for WiX)</p>
<p><dialog id="SCSqlServerConnection" title="!(loc.SC_DefaultDlgTitle)" nominimize="yes" height="270" width="370"></p>
<div class="csharpcode">
<pre class="alt"> <span class="kwrd">&lt;</span><span class="html">dialog</span> <span class="attr">id</span><span class="kwrd">=&quot;SCSqlServerConnection&quot;</span> <span class="attr">title</span><span class="kwrd">=&quot;!(loc.SC_DefaultDlgTitle)&quot;</span> <span class="attr">nominimize</span><span class="kwrd">=&quot;yes&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;270&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;370&quot;</span><span class="kwrd">&gt;</span></pre>
<pre><span class="kwrd">&lt;</span><span class="html">control</span> <span class="attr">id</span><span class="kwrd">=&quot;TextSqlServerName&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;16&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;194&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;54&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;20&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;Text&quot;</span><span class="kwrd">&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;</span><span class="html">text</span><span class="kwrd">&gt;</span>!(loc.SC_SqlServerName)<span class="kwrd">&lt;/</span><span class="html">text</span><span class="kwrd">&gt;</span></pre>
<pre><span class="kwrd">&lt;/</span><span class="html">control</span><span class="kwrd">&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;</span><span class="html">control</span> <span class="attr">id</span><span class="kwrd">=&quot;editSqlServerName&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;15&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;173&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;72&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;21&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;Edit&quot;</span> <span class="attr">property</span><span class="kwrd">=&quot;SQLSERVERNAME&quot;</span><span class="kwrd">&gt;&lt;/</span><span class="html">control</span><span class="kwrd">&gt;</span></pre>
<pre><span class="kwrd">&lt;</span><span class="html">control</span> <span class="attr">id</span><span class="kwrd">=&quot;SqlAuthenticationSelection&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;44&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;340&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;130&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;20&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;RadioButtonGroup&quot;</span> <span class="attr">property</span><span class="kwrd">=&quot;SQLSERVERAUTHENTIFICATIONMODE&quot;</span><span class="kwrd">&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;</span><span class="html">radiobuttongroup</span> <span class="attr">property</span><span class="kwrd">=&quot;SQLSERVERAUTHENTIFICATIONMODE&quot;</span><span class="kwrd">&gt;</span></pre>
<pre><span class="kwrd">&lt;</span><span class="html">radiobutton</span> <span class="attr">height</span><span class="kwrd">=&quot;16&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;179&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;4&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;4&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;1&quot;</span> <span class="attr">text</span><span class="kwrd">=&quot;!(loc.SC_SqlServerAuthentificationIntegrated)&quot;</span> <span class="kwrd">/&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;</span><span class="html">radiobutton</span> <span class="attr">height</span><span class="kwrd">=&quot;16&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;151&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;24&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;4&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;2&quot;</span> <span class="attr">text</span><span class="kwrd">=&quot;!(loc.SC_SqlServerAuthentificationSql)&quot;</span> <span class="kwrd">/&gt;</span></pre>
<pre><span class="kwrd">&lt;/</span><span class="html">radiobuttongroup</span><span class="kwrd">&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;/</span><span class="html">control</span><span class="kwrd">&gt;</span></pre>
<pre><span class="kwrd">&lt;</span><span class="html">control</span> <span class="attr">id</span><span class="kwrd">=&quot;Back&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;17&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;56&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;243&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;180&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;PushButton&quot;</span> <span class="attr">text</span><span class="kwrd">=&quot;!(loc.WixUIBack)&quot;</span> <span class="kwrd">/&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;</span><span class="html">control</span> <span class="attr">id</span><span class="kwrd">=&quot;Next&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;17&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;56&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;243&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;236&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;PushButton&quot;</span> <span class="attr">text</span><span class="kwrd">=&quot;!(loc.WixUINext)&quot;</span> <span class="attr">default</span><span class="kwrd">=&quot;yes&quot;</span><span class="kwrd">&gt;</span></pre>
<pre><span class="kwrd">&lt;</span><span class="html">condition</span> <span class="attr">action</span><span class="kwrd">=&quot;enable&quot;</span><span class="kwrd">&gt;</span></pre>
<pre class="alt">SQLCONNECTIONTESTRESULT = 1</pre>
<pre>&#160;</pre>
<pre class="alt"><span class="kwrd">&lt;/</span><span class="html">condition</span><span class="kwrd">&gt;</span></pre>
<pre><span class="kwrd">&lt;</span><span class="html">condition</span> <span class="attr">action</span><span class="kwrd">=&quot;disable&quot;</span><span class="kwrd">&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;!</span>[CDATA[SQLCONNECTIONTESTRESULT <span class="kwrd">&lt;&gt;</span>1]]<span class="attr">&amp;gt;</span></pre>
<pre><span class="kwrd">&lt;/</span><span class="html">condition</span><span class="kwrd">&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;!</span><span class="html">--</span></pre>
<pre>&amp;<span class="attr">lt</span>;<span class="attr">publish</span> <span class="attr">Event</span><span class="kwrd">=&quot;SpawnDialog&quot;</span> <span class="attr">Value</span><span class="kwrd">=&quot;CheckConnection&quot;</span><span class="kwrd">&gt;</span>1<span class="kwrd">&lt;/</span><span class="html">publish</span><span class="kwrd">&gt;</span>&amp;#8211;<span class="kwrd">&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;/</span><span class="html">control</span><span class="kwrd">&gt;</span></pre>
<pre><span class="kwrd">&lt;</span><span class="html">control</span> <span class="attr">id</span><span class="kwrd">=&quot;Cancel&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;17&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;56&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;243&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;304&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;PushButton&quot;</span> <span class="attr">text</span><span class="kwrd">=&quot;!(loc.WixUICancel)&quot;</span> <span class="attr">cancel</span><span class="kwrd">=&quot;yes&quot;</span><span class="kwrd">&gt;</span></pre>
<pre class="alt">&#160;</pre>
<pre><span class="kwrd">&lt;</span><span class="html">publish</span> <span class="attr">value</span><span class="kwrd">=&quot;CancelDlg&quot;</span> <span class="attr">event</span><span class="kwrd">=&quot;SpawnDialog&quot;</span><span class="kwrd">&gt;</span>1<span class="kwrd">&lt;/</span><span class="html">publish</span><span class="kwrd">&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;/</span><span class="html">control</span><span class="kwrd">&gt;</span></pre>
<pre><span class="kwrd">&lt;</span><span class="html">control</span> <span class="attr">id</span><span class="kwrd">=&quot;BannerBitmap&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;44&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;370&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;0&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;0&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;Bitmap&quot;</span> <span class="attr">text</span><span class="kwrd">=&quot;!(loc.BrowseDlgBannerBitmap)&quot;</span> <span class="attr">tabskip</span><span class="kwrd">=&quot;no&quot;</span> <span class="kwrd">/&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;</span><span class="html">control</span> <span class="attr">id</span><span class="kwrd">=&quot;BannerLine&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;2&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;370&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;44&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;0&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;Line&quot;</span> <span class="kwrd">/&gt;</span></pre>
<pre><span class="kwrd">&lt;</span><span class="html">control</span> <span class="attr">id</span><span class="kwrd">=&quot;BottomLine&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;2&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;370&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;234&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;0&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;Line&quot;</span> <span class="kwrd">/&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;</span><span class="html">control</span> <span class="attr">id</span><span class="kwrd">=&quot;Description&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;15&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;280&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;23&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;25&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;Text&quot;</span> <span class="attr">text</span><span class="kwrd">=&quot;!(loc.SC_SqlServerDlgDescription)&quot;</span> <span class="attr">noprefix</span><span class="kwrd">=&quot;yes&quot;</span> <span class="attr">transparent</span><span class="kwrd">=&quot;yes&quot;</span> <span class="kwrd">/&gt;</span></pre>
<pre><span class="kwrd">&lt;</span><span class="html">control</span> <span class="attr">id</span><span class="kwrd">=&quot;Title&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;15&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;200&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;6&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;15&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;Text&quot;</span> <span class="attr">text</span><span class="kwrd">=&quot;!(loc.SC_SqlServerDlgTitle)&quot;</span> <span class="attr">noprefix</span><span class="kwrd">=&quot;yes&quot;</span> <span class="attr">transparent</span><span class="kwrd">=&quot;yes&quot;</span> <span class="kwrd">/&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;</span><span class="html">control</span> <span class="attr">id</span><span class="kwrd">=&quot;label1&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;16&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;162&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;54&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;208&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;Text&quot;</span> <span class="attr">text</span><span class="kwrd">=&quot;!(loc.SC_SqlServerDatabaseName)&quot;</span> <span class="kwrd">/&gt;</span></pre>
<pre><span class="kwrd">&lt;</span><span class="html">control</span> <span class="attr">id</span><span class="kwrd">=&quot;textBox1&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;15&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;152&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;72&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;208&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;Edit&quot;</span> <span class="attr">property</span><span class="kwrd">=&quot;SQLSERVERDATABASENAME&quot;</span> <span class="kwrd">/&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;</span><span class="html">control</span> <span class="attr">id</span><span class="kwrd">=&quot;label5&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;16&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;243&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;217&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;21&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;Text&quot;</span> <span class="attr">text</span><span class="kwrd">=&quot;!(loc.SC_SqlServerNotes)&quot;</span> <span class="kwrd">/&gt;</span></pre>
<pre><span class="kwrd">&lt;</span><span class="html">control</span> <span class="attr">id</span><span class="kwrd">=&quot;label4&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;16&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;162&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;176&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;208&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;Text&quot;</span> <span class="attr">text</span><span class="kwrd">=&quot;!(loc.SC_SqlServerPassword)&quot;</span> <span class="kwrd">/&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;</span><span class="html">control</span> <span class="attr">id</span><span class="kwrd">=&quot;editServerUser&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;15&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;174&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;194&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;20&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;Edit&quot;</span> <span class="attr">property</span><span class="kwrd">=&quot;SQLSERVERUSERNAME&quot;</span><span class="kwrd">&gt;</span></pre>
<pre><span class="kwrd">&lt;</span><span class="html">condition</span> <span class="attr">action</span><span class="kwrd">=&quot;disable&quot;</span><span class="kwrd">&gt;</span></pre>
<pre class="alt">SQLSERVERAUTHENTIFICATIONMODE = 1</pre>
<pre><span class="kwrd">&lt;/</span><span class="html">condition</span><span class="kwrd">&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;</span><span class="html">condition</span> <span class="attr">action</span><span class="kwrd">=&quot;enable&quot;</span><span class="kwrd">&gt;</span></pre>
<pre>SQLSERVERAUTHENTIFICATIONMODE = 2</pre>
<pre class="alt"><span class="kwrd">&lt;/</span><span class="html">condition</span><span class="kwrd">&gt;</span></pre>
<pre><span class="kwrd">&lt;/</span><span class="html">control</span><span class="kwrd">&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;</span><span class="html">control</span> <span class="attr">id</span><span class="kwrd">=&quot;textBox2&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;15&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;152&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;194&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;208&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;Edit&quot;</span> <span class="attr">property</span><span class="kwrd">=&quot;SQLSERVERPASSWORD&quot;</span><span class="kwrd">&gt;&lt;</span><span class="html">br</span> <span class="kwrd">/&gt;</span></pre>
<pre> <span class="kwrd">&lt;</span><span class="html">condition</span> <span class="attr">action</span><span class="kwrd">=&quot;disable&quot;</span><span class="kwrd">&gt;</span></pre>
<pre class="alt">SQLSERVERAUTHENTIFICATIONMODE = 1</pre>
<pre><span class="kwrd">&lt;/</span><span class="html">condition</span><span class="kwrd">&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;</span><span class="html">condition</span> <span class="attr">action</span><span class="kwrd">=&quot;enable&quot;</span><span class="kwrd">&gt;</span></pre>
<pre>SQLSERVERAUTHENTIFICATIONMODE = 2</pre>
<pre class="alt"><span class="kwrd">&lt;/</span><span class="html">condition</span><span class="kwrd">&gt;</span></pre>
<pre><span class="kwrd">&lt;/</span><span class="html">control</span><span class="kwrd">&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;</span><span class="html">control</span> <span class="attr">id</span><span class="kwrd">=&quot;label3&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;16&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;174&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;176&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;20&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;Text&quot;</span> <span class="attr">text</span><span class="kwrd">=&quot;!(loc.SC_SqlServerUserName)&quot;</span> <span class="kwrd">/&gt;</span></pre>
<pre><span class="kwrd">&lt;</span><span class="html">control</span> <span class="attr">id</span><span class="kwrd">=&quot;btnCheckConnection&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;17&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;56&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;213&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;304&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;PushButton&quot;</span> <span class="attr">text</span><span class="kwrd">=&quot;!(loc.SC_SqlServerConnectionTest)&quot;</span><span class="kwrd">&gt;</span></pre>
<pre class="alt">&#160;</pre>
<pre><span class="kwrd">&lt;</span><span class="html">publish</span> <span class="attr">value</span><span class="kwrd">=&quot;CheckConnection&quot;</span> <span class="attr">event</span><span class="kwrd">=&quot;SpawnDialog&quot;</span> <span class="attr">order</span><span class="kwrd">=&quot;2&quot;</span><span class="kwrd">&gt;</span>1<span class="kwrd">&lt;/</span><span class="html">publish</span><span class="kwrd">&gt;</span></pre>
<pre class="alt">&#160;</pre>
<pre><span class="kwrd">&lt;</span><span class="html">publish</span> <span class="attr">value</span><span class="kwrd">=&quot;CheckSqlConnection&quot;</span> <span class="attr">event</span><span class="kwrd">=&quot;DoAction&quot;</span> <span class="attr">order</span><span class="kwrd">=&quot;1&quot;</span><span class="kwrd">&gt;</span>1<span class="kwrd">&lt;/</span><span class="html">publish</span><span class="kwrd">&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;/</span><span class="html">control</span><span class="kwrd">&gt;</span></pre>
<pre><span class="kwrd">&lt;</span><span class="html">control</span> <span class="attr">id</span><span class="kwrd">=&quot;label2&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;16&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;194&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;112&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;20&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;Text&quot;</span> <span class="attr">text</span><span class="kwrd">=&quot;!(loc.SC_SqlServerAuthentificationMode)&quot;</span> <span class="kwrd">/&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;/</span><span class="html">dialog</span><span class="kwrd">&gt;</span></pre>
<pre><span class="kwrd">&lt;</span><span class="html">dialog</span> <span class="attr">id</span><span class="kwrd">=&quot;CheckConnection&quot;</span> <span class="attr">title</span><span class="kwrd">=&quot;!(loc.SC_DefaultDlgTitle)&quot;</span> <span class="attr">nominimize</span><span class="kwrd">=&quot;yes&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;85&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;260&quot;</span><span class="kwrd">&gt;&lt;</span><span class="html">br</span> <span class="kwrd">/&gt;</span></pre>
<pre class="alt"> <span class="kwrd">&lt;</span><span class="html">control</span> <span class="attr">id</span><span class="kwrd">=&quot;Yes&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;17&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;56&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;57&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;72&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;PushButton&quot;</span> <span class="attr">text</span><span class="kwrd">=&quot;!(loc.WixUIOK)&quot;</span><span class="kwrd">&gt;</span></pre>
<pre>&#160;</pre>
<pre class="alt"><span class="kwrd">&lt;</span><span class="html">publish</span> <span class="attr">value</span><span class="kwrd">=&quot;Return&quot;</span> <span class="attr">event</span><span class="kwrd">=&quot;EndDialog&quot;</span><span class="kwrd">&gt;</span>1<span class="kwrd">&lt;/</span><span class="html">publish</span><span class="kwrd">&gt;</span></pre>
<pre><span class="kwrd">&lt;/</span><span class="html">control</span><span class="kwrd">&gt;&lt;</span><span class="html">br</span> <span class="kwrd">/&gt;</span></pre>
<pre class="alt"> <span class="kwrd">&lt;</span><span class="html">control</span> <span class="attr">id</span><span class="kwrd">=&quot;TextFailed&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;30&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;194&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;15&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;48&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;Text&quot;</span> <span class="attr">text</span><span class="kwrd">=&quot;!(loc.SC_SqlServerConnectionTestFailed)&quot;</span><span class="kwrd">&gt;</span></pre>
<pre><span class="kwrd">&lt;</span><span class="html">condition</span> <span class="attr">action</span><span class="kwrd">=&quot;show&quot;</span><span class="kwrd">&gt;</span></pre>
<pre class="alt">SQLCONNECTIONTESTRESULT = 0</pre>
<pre><span class="kwrd">&lt;/</span><span class="html">condition</span><span class="kwrd">&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;</span><span class="html">condition</span> <span class="attr">action</span><span class="kwrd">=&quot;hide&quot;</span><span class="kwrd">&gt;</span></pre>
<pre><span class="kwrd">&lt;!</span>[CDATA[SQLCONNECTIONTESTRESULT <span class="kwrd">&lt;&gt;</span>0]]<span class="attr">&amp;gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;/</span><span class="html">condition</span><span class="kwrd">&gt;</span></pre>
<pre><span class="kwrd">&lt;/</span><span class="html">control</span><span class="kwrd">&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;</span><span class="html">control</span> <span class="attr">id</span><span class="kwrd">=&quot;TextSuccess&quot;</span> <span class="attr">height</span><span class="kwrd">=&quot;30&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;194&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;15&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;48&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;Text&quot;</span> <span class="attr">text</span><span class="kwrd">=&quot;!(loc.SC_SqlServerConnectionTestSucceeded)&quot;</span><span class="kwrd">&gt;</span></pre>
<pre><span class="kwrd">&lt;</span><span class="html">condition</span> <span class="attr">action</span><span class="kwrd">=&quot;show&quot;</span><span class="kwrd">&gt;</span></pre>
<pre class="alt">SQLCONNECTIONTESTRESULT = 1</pre>
<pre><span class="kwrd">&lt;/</span><span class="html">condition</span><span class="kwrd">&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;</span><span class="html">condition</span> <span class="attr">action</span><span class="kwrd">=&quot;hide&quot;</span><span class="kwrd">&gt;</span></pre>
<pre><span class="kwrd">&lt;!</span>[CDATA[SQLCONNECTIONTESTRESULT <span class="kwrd">&lt;&gt;</span>1]]<span class="attr">&amp;gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;/</span><span class="html">condition</span><span class="kwrd">&gt;</span></pre>
<pre><span class="kwrd">&lt;/</span><span class="html">control</span><span class="kwrd">&gt;</span></pre>
<pre class="alt"><span class="kwrd">&lt;</span><span class="html">control</span> <span class="attr">id</span><span class="kwrd">=&quot;Icon&quot;</span> <span class="kwrd">&gt;&lt;</span><span class="html">br</span> <span class="attr">height</span><span class="kwrd">=&quot;24&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;24&quot;</span> <span class="attr">y</span><span class="kwrd">=&quot;15&quot;</span> <span class="attr">x</span><span class="kwrd">=&quot;15&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;Icon&quot;</span> <span class="kwrd">/&gt;</span>ToolTip=<span class="attr">&amp;quot;</span>Information icon<span class="attr">&amp;quot;</span> FixedSize=<span class="attr">&amp;quot;</span>yes<span class="attr">&amp;quot;</span> IconSize=<span class="attr">&amp;quot;</span>32<span class="attr">&amp;quot;</span> Text=<span class="attr">&amp;quot;</span>InfoIcon<span class="attr">&amp;quot;</span> /<span class="attr">&amp;gt;</span><span class="kwrd">&lt;</span><span class="html">br</span> <span class="kwrd">/&gt;</span></pre>
<pre> <span class="kwrd">&lt;/</span><span class="html">dialog</span><span class="kwrd">&gt;</span></pre>
</div>
<p>Which looks like this:</p>
<p><img alt="blogsqlsetupscreen.png" src="http://benschwehn.files.wordpress.com/2007/10/blogsqlsetupscreen.png" /></p>
<p>There is still a little problem with it: since the custom action runs on the UI thread the installation becomes unresponsive during the check. This is pretty bad since the connection test can take quite a while (when not finding the server on the network for example). I didn&#8217;t have the time (and need) to do it yet, but the best way to avoid the unresponsiveness is to take care of it in the custom action itself: creating a &quot;I&#8217;m busy&quot; dialog before doing the connection test. There seems to be no way to do it within MSI itself.</p>
]]></content:encoded>
			<wfw:commentRss>http://bschwehn.de/blog/?feed=rss2&amp;p=8</wfw:commentRss>
		</item>
		<item>
		<title>generate create assembly from &#60;binary bits&#62; script</title>
		<link>http://bschwehn.de/blog/?p=7</link>
		<comments>http://bschwehn.de/blog/?p=7#comments</comments>
		<pubDate>Sun, 07 Oct 2007 21:06:32 +0000</pubDate>
		<dc:creator>bschwehn</dc:creator>
		
		<category><![CDATA[powershell]]></category>

		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://benschwehn.wordpress.com/2007/10/07/generate-create-assembly-from-binary-bits-script/</guid>
		<description><![CDATA[Just a quick&#8217;n'dirty powershell script to generate the t-sql create assemby statement for creating a clr assembly. Converts the dll to the corresponding &#60;assembly_bits&#62; binary values like:
create assembly [TestAssembly] from 0&#215;4D5A90 [...]
Useful when you just want to have a sql script and don&#8217;t want to bother copying or otherwise making the dll accessible to the [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick&#8217;n'dirty powershell script to generate the t-sql <a href="http://msdn2.microsoft.com/en-gb/library/ms189524.aspx"><em>create assemby</em></a> statement for creating a clr assembly. Converts the dll to the corresponding &lt;<em>assembly_bit</em>s&gt; binary values like:</p>
<p><code>create assembly [TestAssembly] from 0&#215;4D5A90 [...]</code></p>
<p>Useful when you just want to have a sql script and don&#8217;t want to bother copying or otherwise making the dll accessible to the database server.   <br />I use it for building in a makefile target.</p>
<div class="csharpcode">
<pre class="alt">param</pre>
<pre>(</pre>
<pre class="alt">$<span class="kwrd">out</span> = <span class="str">'createAssembly.txt'</span>,</pre>
<pre>$assemblyFile = <span class="str">'TheDll.dll'</span>,</pre>
<pre class="alt">$assemblyName = <span class="str">'TestAssembly'</span></pre>
<pre>)</pre>
<pre class="alt">&#160;</pre>
<pre>$stringBuilder = New-Object -Type System.Text.StringBuilder</pre>
<pre class="alt">$stringBuilder.Append(<span class="str">&quot;create assembly [&quot;</span>) &gt; $<span class="kwrd">null</span></pre>
<pre>$stringBuilder.Append($assemblyName) &gt; $<span class="kwrd">null</span></pre>
<pre class="alt">$stringBuilder.Append(<span class="str">&quot;] from `n0x&quot;</span>) &gt; $<span class="kwrd">null</span></pre>
<pre>&#160;</pre>
<pre class="alt">$assemblyFile = resolve-path $assemblyFile</pre>
<pre>&#160;</pre>
<pre class="alt">$fileStream = [IO.File]::OpenRead($assemblyFile)</pre>
<pre>&#160;</pre>
<pre class="alt"><span class="kwrd">while</span> (($<span class="kwrd">byte</span> = $fileStream.ReadByte()) -gt -1) {</pre>
<pre>$stringBuilder.Append($<span class="kwrd">byte</span>.ToString(<span class="str">&quot;X2&quot;</span>)) &gt; $<span class="kwrd">null</span></pre>
<pre class="alt">}</pre>
<pre>$stringBuilder.Append(<span class="str">&quot;`nwith permission_set = SAFE&quot;</span>)</pre>
<pre class="alt">&#160;</pre>
<pre>$stringBuilder.ToString() &gt; $<span class="kwrd">out</span>;</pre>
<pre class="alt">$fileStream.Close()</pre>
<pre>$fileStream.Dispose()</pre>
<pre class="alt">&#160;</pre>
</div>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
]]></content:encoded>
			<wfw:commentRss>http://bschwehn.de/blog/?feed=rss2&amp;p=7</wfw:commentRss>
		</item>
	</channel>
</rss>
