tag:blogger.com,1999:blog-90870755089810849192024-03-02T03:06:58.477+02:00MDB BlogMy Development Blog!
Information and code samples/examples on: Compact Framework using C#, J2ME using java, Web development using ASP.NET, Windows Forms on C# and other special tricks at excel, word. enjoy...sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.comBlogger67125tag:blogger.com,1999:blog-9087075508981084919.post-45056529690968048382022-12-06T11:05:00.007+02:002022-12-06T11:07:08.217+02:00MySQL: SUBSTRING_INDEX vs MID+INSTR (which is better)<div><p dir="ltr" style="text-align: left;"><span style="font-family: arial;">Hello there.</span></p><p dir="ltr" style="text-align: left;"><br /></p><h3 dir="ltr" style="text-align: left;"><span style="font-family: arial;">SUBSTRING_INDEX vs MID+INSTR <br /></span></h3><p dir="ltr" style="text-align: left;"><span style="font-family: arial;">I wanted to pull from domain name out of an email (or just remove the username part of an email).</span></p><p dir="ltr" style="text-align: left;"><span style="font-family: arial;">There are two simple functions (and even more...) to do it:</span></p><p dir="ltr" style="text-align: left;"><b><span style="font-family: courier;">1] <a href="https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_substring-index" target="_blank">SUBSTRING_INDEX</a>('testuser@domain.com','@',-1)</span></b></p><p dir="ltr" style="text-align: left;"><span style="font-family: arial;">use built in function <a href="https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_substring-index" target="_blank">SUBSTRING_INDEX</a> to explode the string by '@' and get the last element.</span></p><p dir="ltr" style="text-align: left;"><span style="font-family: arial;"> </span></p></div><div><div><p dir="ltr" style="text-align: left;"><span style="font-family: courier;"><b>2] <a href="https://dev.mysql.com/doc/refman/en/string-functions.html#function_mid" target="_blank">MID</a>('testuser@domain.com', <a href="https://dev.mysql.com/doc/refman/en/string-functions.html#function_instr" target="_blank">INSTR</a>('testuser@domain.com','@')+1, 999)</b></span></p><p dir="ltr" style="text-align: left;"><span style="font-family: arial;">find '@' position using <a href="https://dev.mysql.com/doc/refman/en/string-functions.html#function_instr" target="_blank">INSTR</a> and get all string from that position until the end of string by <a href="https://dev.mysql.com/doc/refman/en/string-functions.html#function_mid" target="_blank">MID</a> function.<b> </b></span></p><p dir="ltr" style="text-align: left;"><span style="font-family: arial;"><b> </b></span></p><h3 dir="ltr" style="text-align: left;"><b>But which one of them have better performance? </b></h3><p dir="ltr" style="text-align: left;"><span style="font-family: arial;">Using </span><a href="https://dev.mysql.com/doc/refman/en/select-benchmarking.html" target="_blank"><span style="font-family: arial;"></span>BENCHMARK</a> function for Measuring the Speed of Expressions and Functions.</p><p dir="ltr" style="text-align: left;"><span style="font-size: small;"><span style="font-family: courier;">1] SELECT <a href="https://dev.mysql.com/doc/refman/en/select-benchmarking.html" target="_blank">BENCHMARK</a>(100000000, </span></span><span style="font-family: courier;"><a href="https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_substring-index" target="_blank">SUBSTRING_INDEX</a></span><span style="font-size: small;"><span style="font-family: courier;">('testuser@domain.com','@',-1))</span></span></p><p dir="ltr" style="text-align: left;">/* Affected rows: 0 Found rows: 1 Warnings: 0 <span style="background-color: #fcff01;">Duration for 1 query: 12.625 sec.</span> */</p><p dir="ltr" style="text-align: left;"><br /></p><p dir="ltr" style="text-align: left;"><span style="font-family: courier;">2] SELECT <a href="https://dev.mysql.com/doc/refman/en/select-benchmarking.html" target="_blank">BENCHMARK</a>(100000000, </span><span style="font-family: courier;"><a href="https://dev.mysql.com/doc/refman/en/string-functions.html#function_mid" target="_blank">MID</a></span><span style="font-family: courier;">('testuser@domain.com', </span><span style="font-family: courier;"><a href="https://dev.mysql.com/doc/refman/en/string-functions.html#function_instr" target="_blank">INSTR</a></span><span style="font-family: courier;">('testuser@domain.com','@')+1, 999))</span><br /></p><p dir="ltr" style="text-align: left;">/* Affected rows: 0 Found rows: 1 Warnings: 0 <span style="background-color: #fcff01;">Duration for 1 query: 19.157 sec.</span> */</p><p dir="ltr" style="text-align: left;"><br /></p><p dir="ltr" style="text-align: left;"><span style="font-family: arial;"></span><a href="https://dev.mysql.com/doc/refman/en/select-benchmarking.html" target="_blank"><span style="font-family: arial;"></span>BENCHMARK</a> function results may vary between different devices, but on the same device can give quite clear results.</p><p dir="ltr" style="text-align: left;"> </p><h3 dir="ltr" style="text-align: left;"><span style="font-family: arial;">Summary:</span></h3><p dir="ltr" style="text-align: left;"><span style="font-family: arial;"><a href="https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_substring-index" target="_blank">SUBSTRING_INDEX</a> won and have better results than <a href="https://dev.mysql.com/doc/refman/en/string-functions.html#function_mid" target="_blank">MID</a> + <a href="https://dev.mysql.com/doc/refman/en/string-functions.html#function_instr" target="_blank">INSTR</a></span> </p><p dir="ltr" style="text-align: left;"><br /></p></div></div>sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com0tag:blogger.com,1999:blog-9087075508981084919.post-70965751999016132652022-07-11T10:33:00.007+03:002022-07-11T10:33:44.777+03:00JQuery serialize on form is EMPTY (ajax/post/get)<p dir="ltr" style="text-align: left;"> Hi All,</p><p dir="ltr" style="text-align: left;"><br /></p><p dir="ltr" style="text-align: left;">I had several times a problem, that the collected data by jQuery API's <a href="https://api.jquery.com/serialize/" target="_blank">serialize()</a> or <a href="https://api.jquery.com/serializeArray/" target="_blank">serializeArray()</a> <b>was empty</b>, although the inputs were not empty.</p><p dir="ltr" style="text-align: left;">Follow these checkups to by pass the problem.</p><p dir="ltr" style="text-align: left;">1] when the input don't <b>name attribute </b>the result will be empty.</p><pre dir="ltr" style="line-height: 125%; margin: 0px; text-align: left;"><span style="color: #007700;"><form</span> <span style="color: #0000cc;">id=</span><span style="background-color: #fff0f0;">"form1"</span><span style="color: #007700;">></span>
<span style="color: #007700;"><input</span> <span style="color: #0000cc;">type=</span><span style="background-color: #fff0f0;">"text"</span> <span style="color: #0000cc;">value=</span><span style="background-color: #fff0f0;">"test value"</span><span style="color: #007700;">></span>
<span style="color: #007700;"><button></span>submit<span style="color: #007700;"></button></span>
<span style="color: #007700;"></form></span></pre><pre dir="ltr" style="line-height: 125%; margin: 0px; text-align: left;"></pre><pre dir="ltr" style="line-height: 125%; margin: 0px; text-align: left;"><span style="color: #007700;"></span></pre><pre dir="ltr" style="line-height: 125%; margin: 0px; text-align: left;"><span class="message-body-wrapper"><span class="message-flex-body"><span class="message-body devtools-monospace"><span class="cm-variable">//$</span>(<span class="cm-string">'#form1'</span>).<span class="cm-property">serialize</span>()</span> ==> "" (empty)</span></span></pre><pre dir="ltr" style="line-height: 125%; margin: 0px; text-align: left;"><b><span class="message-body-wrapper"><span class="message-flex-body"> </span></span></b></pre><pre dir="ltr" style="line-height: 125%; margin: 0px; text-align: left;"><b><span class="message-body-wrapper"><span class="message-flex-body"> </span></span></b></pre><pre dir="ltr" style="line-height: 125%; margin: 0px; text-align: left;">SOLUTION:</pre><pre dir="ltr" style="line-height: 125%; margin: 0px; text-align: left;"><span style="color: #007700;"><form</span> <span style="color: #0000cc;">id=</span><span style="background-color: #fff0f0;">"form1"</span><span style="color: #007700;">></span>
<span style="color: #007700;"><input</span> <span style="color: #0000cc;">type=</span><span style="background-color: #fff0f0;">"text"</span> <span style="color: #0000cc;">value=</span><span style="background-color: #fff0f0;">"test value" </span><span style="background-color: #fcff01;"><span style="color: #0000cc;">value=</span>"ANYNAME"</span><span style="color: #007700;">></span>
<span style="color: #007700;"><button></span>submit<span style="color: #007700;"></button></span>
<span style="color: #007700;"></form></span></pre><pre dir="ltr" style="line-height: 125%; margin: 0px; text-align: left;"><span class="message-body-wrapper"><span class="message-flex-body"><span class="message-body devtools-monospace"><span class="cm-variable">//$</span>(<span class="cm-string">'#form1'</span>).<span class="cm-property">serialize</span>()</span> ==> </span></span><span class="message-body-wrapper"><span class="message-flex-body"><span class="message-body devtools-monospace"><span class="objectBox objectBox-string">"ANYNAME=test+value"</span></span> </span></span></pre><pre dir="ltr" style="line-height: 125%; margin: 0px; text-align: left;"><span class="message-body-wrapper"><span class="message-flex-body"> </span></span></pre><pre dir="ltr" style="line-height: 125%; margin: 0px; text-align: left;"><span class="message-body-wrapper"><span class="message-flex-body"><span><a name='more'></a></span> </span></span><br /></pre><div dir="ltr" style="text-align: left;">2] when the input <b>is DISABLED </b>the result will be empty.</div><pre dir="ltr" style="line-height: 125%; margin: 0px; text-align: left;"><span style="color: #007700;"> </span></pre><pre dir="ltr" style="line-height: 125%; margin: 0px; text-align: left;"><span style="color: #007700;"><form</span> <span style="color: #0000cc;">id=</span><span style="background-color: #fff0f0;">"form1"</span><span style="color: #007700;">></span>
<span style="color: #007700;"><input</span> <span style="color: #0000cc;">type=</span><span style="background-color: #fff0f0;">"text"</span> <span style="color: #0000cc;">value=</span><span style="background-color: #fff0f0;">"test value"</span> <span style="color: #0000cc;">name=</span><span style="background-color: #fff0f0;">"ANYNAME"</span> <span style="background-color: #fcff01;"><span style="color: #0000cc;">disabled=</span>"true"</span> <span style="color: #007700;">/></span>
<span style="color: #007700;"><button></span>submit<span style="color: #007700;"></button></span>
<span style="color: #007700;"></form></span></pre><pre dir="ltr" style="line-height: 125%; margin: 0px; text-align: left;"><span style="color: #007700;"> </span></pre><pre dir="ltr" style="line-height: 125%; margin: 0px; text-align: left;"><span class="message-body-wrapper"><span class="message-flex-body"><span class="message-body devtools-monospace"><span class="cm-variable">//$</span>(<span class="cm-string">'#form1'</span>).<span class="cm-property">serialize</span>()</span> ==> "" (empty)</span></span></pre><pre dir="ltr" style="line-height: 125%; margin: 0px; text-align: left;"><span class="message-body-wrapper"><span class="message-flex-body"> </span></span></pre><div dir="ltr" style="text-align: left;">NOTE: sometimes the inputs are disabled upon form submit (loader shown), </div><div dir="ltr" style="text-align: left;">and while calling <a href="https://api.jquery.com/serialize/" target="_blank">serialize</a>/<a href="https://api.jquery.com/serializeArray/" target="_blank">serializeArray</a> the disabled inputs (selects/...) are ignored and empty values received.<br /></div><pre dir="ltr" style="line-height: 125%; margin: 0px; text-align: left;"></pre><pre dir="ltr" style="line-height: 125%; margin: 0px; text-align: left;"><span class="message-body-wrapper"><span class="message-flex-body"> </span></span></pre><pre dir="ltr" style="line-height: 125%; margin: 0px; text-align: left;"><span class="message-body-wrapper"><span class="message-flex-body"> <span><!--more--></span></span></span></pre><pre dir="ltr" style="line-height: 125%; margin: 0px; text-align: left;"><span class="message-body-wrapper"><span class="message-flex-body"> </span></span></pre><div dir="ltr" style="text-align: left;">3] make sure your form's HTML is well formatted. broken HTML code might hurt functionality.</div><div dir="ltr" style="text-align: left;"><br /></div><div dir="ltr" style="text-align: left;"><br /></div><div dir="ltr" style="text-align: left;"><b>HOPE HELPED HERE :)</b><br /></div><pre dir="ltr" style="line-height: 125%; margin: 0px; text-align: left;"></pre><pre style="line-height: 125%; margin: 0;"><span style="color: #007700;"> </span></pre><p dir="ltr" style="text-align: left;"></p>sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com0tag:blogger.com,1999:blog-9087075508981084919.post-80409393974017407622021-12-12T10:04:00.010+02:002021-12-15T08:42:05.570+02:00using FontAwesome in PHP FPDF <p dir="ltr" style="text-align: left;">Hi All,</p><p dir="ltr" style="text-align: left;">I found it impossible to use <a href="https://fontawesome.com/v4.7.0/" target="_blank">FontAwesome 4.7.0 Free version</a>, inside <a href="http://www.fpdf.org/">FPDF PHP</a> engine.</p><p dir="ltr" style="text-align: left;">When trying to upload the <b>FontAwesome.4.7.full.otf </b>into <a href="http://www.fpdf.org/makefont/" target="_blank">FPDF's Font File Generation</a>, I'm getting an error:</p><p dir="ltr" style="text-align: left;">
<span style="font-size: x-small;"><i><b>Error</b>: OpenType fonts based on PostScript outlines are not supported</i></span></p><p dir="ltr" style="text-align: left;"><br /></p><p dir="ltr" style="text-align: left;">So my solution, </p><p dir="ltr" style="text-align: left;">to re-build the FontAwesome font 4.7 free version (under same license!),</p><p dir="ltr" style="text-align: left;">with mapping of regular characters to icons HEX CODES: 0x21 to 0xFF. </p><p dir="ltr" style="text-align: left;">So for example, </p><p dir="ltr" style="text-align: left;">character code 0x21 is now mapped to * (<a href="https://fontawesome.com/v4.7/icon/asterisk" target="_blank">FontAwesome's asterisk</a>)<br /></p><p dir="ltr" style="text-align: left;"><br /></p><p dir="ltr" style="text-align: left;">And then, just use it inside PHP FPDF as follows:</p><p dir="ltr" style="text-align: left;"><span><span style="font-family: courier;">// Import and prepare font for usage by engine:</span></span></p><p dir="ltr" style="text-align: left;"><span><span style="font-family: courier;">$pdf->AddFont('FontAwesome47-P1','','FontAwesome47-P1.php');<br /></span></span></p><p dir="ltr" style="text-align: left;"><span><span style="font-family: courier;">...</span></span></p><p dir="ltr" style="text-align: left;"><span><span style="font-family: courier;">// print FontAwesome's asterisk<br /></span></span></p><p dir="ltr" style="text-align: left;"><span style="font-family: courier;"><span><span>$pdf->SetFont('FontAwesome47-P1' '', 14);</span></span><br /></span></p><p dir="ltr" style="text-align: left;"><span><span style="font-family: courier;"></span></span></p><p dir="ltr" style="text-align: left;"><span style="font-family: courier;">$pdf->Text($x, $y, chr(0x21));</span></p><p dir="ltr" style="text-align: left;"><br /></p><p dir="ltr" style="text-align: left;">Note:</p><p dir="ltr" style="text-align: left;">Remember to upload the files FontAwesome47-P1.php + FontAwesome47-P1.z, <br />that generated on <a href="http://www.fpdf.org/makefont/" target="_blank">FPDF's Font File Generation</a> to the FPDF's font folder.</p><p dir="ltr" style="text-align: left;">Characters code MAP of new fonts exists as preview when opening the google-drive links below.</p><p dir="ltr" style="text-align: left;"><br /></p><p dir="ltr" style="text-align: left;"><b>View MAP + DOWNLOAD: </b><a href="https://drive.google.com/file/d/1Y3NlxBZtXPcFUIwiLeQWzdzdoSe9f6xo/view?usp=sharing" style="font-weight: bold;" target="_blank">FontAwesome47-P1.otf (google drive)</a></p><p dir="ltr" style="text-align: left;"><b>View MAP + </b><b>DOWNLOAD</b><b>: </b><a href="https://drive.google.com/file/d/1XjjEyhkcD0mO6FTf0w9XHB4bwjMCL2ij/view?usp=sharing" style="font-weight: bold;" target="_blank">FontAwesome47-P2.otf (google drive)</a></p><p dir="ltr" style="text-align: left;"><b>View MAP + </b><b>DOWNLOAD</b><b>: </b><a href="https://drive.google.com/file/d/10WBuA63DMbNPRWjKSKJpVSk4I1OPwh2R/view?usp=sharing" style="font-weight: bold;" target="_blank">FontAwesome47-P3.otf (google drive)</a></p><p dir="ltr" style="text-align: left;"><b>View MAP + </b><b>DOWNLOAD</b><b>: </b><a href="https://drive.google.com/file/d/1lPeh5IGXY8Re6nNXEU7i0Wf63o97Svx0/view?usp=sharing" style="font-weight: bold;" target="_blank">FontAwesome47-P4.otf (google drive)</a></p><p dir="ltr" style="text-align: left;"><br /></p><p dir="ltr" style="text-align: left;"><b>PHP+Z Files ready-to-use for PHP FPDF (with </b><span style="text-align: right;"><b>ISO-8859-1 encoding):</b></span></p><p dir="ltr" style="text-align: left;"><span style="text-align: right;"><b><a href="https://drive.google.com/file/d/1BjPTWGKBFyjwyYaYwa7myBQd2uikiWEn/view?usp=sharing" target="_blank">FontAwesome47-P1-4 (php+z files) DOWNLOAD (google drive)</a></b></span></p><p dir="ltr" style="text-align: left;"><br /></p><br /><p dir="ltr" style="text-align: left;">Best regards!</p><p dir="ltr" style="text-align: left;">Please write comments...<br /></p><p dir="ltr" style="text-align: left;"><br /></p>sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com1tag:blogger.com,1999:blog-9087075508981084919.post-52760595562062975732021-10-17T15:13:00.000+03:002021-10-17T15:13:02.626+03:00MySQL | join/combine 2 SMALLINT/TINYINT into 1 INT
<div style="direction:ltr;line-height:1.4;text-align:left">
Hi All.<br />
<br />
Today we will try to combine two MYSQL small integer values into one integer value.<br />
Obviously, there is limit for the size of integer.<br />
We will discuss only UNSIGNED integer column types (non negative values).<br/>
<br />
2 Solutions are suggested below:<br />
<b>Solution-1:</b>
concatenate base-9 value of each number with '9' separator.<br />
<b>Solution-2:</b>
concatenate the original values with padding (left) zeros.<br />
[Note: if the values allowed to be NULL, solution-2 is not supported!].
<h3># LIMITS #</h3>
First, lets learn about the range limits of each data-type:
<table border="1" cellpadding="5" style="border-collapse:collapse">
<tr><th>Datatype</th><th>Type</th><th>UNSIGNED Range</th><th>Max value (base9)</th></tr>
<tr><td><span style="font-weight:bold;color:#437ac7;">INT</span></td><td>A normal-size integer</td><td>0 to 4294967295</td><td>-</td></tr>
<tr><td><span style="font-weight:bold;color:#437ac7;">SMALLINT</span></td><td>A small integer</td><td>0 to 65535</td><td><span style="padding:2px 4px;font-size:80%;color:#c7254e;background-color:#f9f2f4;border-radius:4px;line-height:2;">CONV(65535, 10, 9) = 108806</span></td></tr>
<tr><td><span style="font-weight:bold;color:#437ac7;">TINYINT</span></td><td>A very small integer</td><td>0 to 255</td><td><span style="padding:2px 4px;font-size:80%;color:#c7254e;background-color:#f9f2f4;border-radius:4px;line-height:2;">CONV(255, 10, 9) = 313</span></td></tr>
</table>
<h3># SOLUTION-1 (Support NULL values) #</h3>
Combine and merge two small integers, <br />
into 1 integer by converting each number to base-9 integer,<br />
and then concatenate with the digit '9' as separator.<br />
<br />
Two SMALLINTs cannot be saved inside INT value: <br /> 108806<b>9</b>108806 > 4294967295.<br />
But combining SMALLINT with TINYINT is possible (and aswell two TINYINT).<br />
<br />
MYSQL CODE:<br />
<pre style="padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px;line-height:2;">
############ TABLE DEFINITION:
CREATE TABLE `table_test` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`sint1` SMALLINT(5) UNSIGNED NULL DEFAULT NULL,
`tint2` TINYINT(3) UNSIGNED NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE);
############ SELECT:
SELECT T.*,
CONV(SUBSTRING_INDEX(combined,'9',1), 9,10) as _sint1,
CONV(SUBSTRING_INDEX(combined,'9',-1),9,10) as _tint2
FROM (
SELECT id, sint1, tint2,
CONCAT( IFNULL(CONV(sint1, 10, 9),''),
'9',
IFNULL(CONV(tint2, 10, 9),'')
) AS combined
FROM table_test
) AS T
</pre><br />
And output will be:<br />
<table border="1" cellpadding="5" style="border-collapse:collapse">
<tr><th>id</th><th>sint1</th><th>tint2</th><th><span style="color:#a00">>combined</span></th><th><span style="color:#00a">>_sint1</span></th><th><span style="color:#00a">>_tint2</span></th></tr>
<tr><td>1</td><td>NULL</td><td>NULL</td><td><span style="color:#a00">9</span></td><td><span style="color:#00a">NULL</span></td><td><span style="color:#00a">NULL</span></td></tr>
<tr><td>2</td><td>1234</td><td>NULL</td><td><span style="color:#a00">16219</span></td><td><span style="color:#00a">1234</span></td><td><span style="color:#00a">NULL</span></td></tr>
<tr><td>3</td><td>NULL</td><td>255</td><td><span style="color:#a00">9313</span></td><td><span style="color:#00a">NULL</span></td><td><span style="color:#00a">255</span></td></tr>
<tr><td>4</td><td>3123</td><td>38</td><td><span style="color:#a00">4250942</span></td><td><span style="color:#00a">3123</span></td><td><span style="color:#00a">38</span></td></tr>
<tr><td>5</td><td>3410</td><td>243</td><td><span style="color:#a00">46089300</span></td><td><span style="color:#00a">3410</span></td><td><span style="color:#00a">243</span></td></tr>
<tr><td>6</td><td>2685</td><td>207</td><td><span style="color:#a00">36139250</span></td><td><span style="color:#00a">2685</span></td><td><span style="color:#00a">207</span></td></tr>
<tr><td>7</td><td>1327</td><td>224</td><td><span style="color:#a00">17349268</span></td><td><span style="color:#00a">1327</span></td><td><span style="color:#00a">224</span></td></tr>
<tr><td>8</td><td>2047</td><td>102</td><td><span style="color:#a00">27249123</span></td><td><span style="color:#00a">2047</span></td><td><span style="color:#00a">102</span></td></tr>
<tr><td>9</td><td>2953</td><td>189</td><td><span style="color:#a00">40419230</span></td><td><span style="color:#00a">2953</span></td><td><span style="color:#00a">189</span></td></tr>
<tr><td>10</td><td>3686</td><td>117</td><td><span style="color:#a00">50459140</span></td><td><span style="color:#00a">3686</span></td><td><span style="color:#00a">117</span></td></tr>
<tr><td>11</td><td>4455</td><td>18</td><td><span style="color:#a00">6100920</span></td><td><span style="color:#00a">4455</span></td><td><span style="color:#00a">18</span></td></tr>
<tr><td>12</td><td>2482</td><td>66</td><td><span style="color:#a00">3357973</span></td><td><span style="color:#00a">2482</span></td><td><span style="color:#00a">66</span></td></tr>
<tr><td>13</td><td>3072</td><td>74</td><td><span style="color:#a00">4183982</span></td><td><span style="color:#00a">3072</span></td><td><span style="color:#00a">74</span></td></tr>
<tr><td>14</td><td>2036</td><td>42</td><td><span style="color:#a00">2712946</span></td><td><span style="color:#00a">2036</span></td><td><span style="color:#00a">42</span></td></tr>
<tr><td>15</td><td>2047</td><td>139</td><td><span style="color:#a00">27249164</span></td><td><span style="color:#00a">2047</span></td><td><span style="color:#00a">139</span></td></tr>
<tr><td>16</td><td>1573</td><td>236</td><td><span style="color:#a00">21379282</span></td><td><span style="color:#00a">1573</span></td><td><span style="color:#00a">236</span></td></tr>
<tr><td>17</td><td>2464</td><td>173</td><td><span style="color:#a00">33379212</span></td><td><span style="color:#00a">2464</span></td><td><span style="color:#00a">173</span></td></tr>
<tr><td>18</td><td>3656</td><td>155</td><td><span style="color:#a00">50129182</span></td><td><span style="color:#00a">3656</span></td><td><span style="color:#00a">155</span></td></tr>
<tr><td>19</td><td>3305</td><td>120</td><td><span style="color:#a00">44729143</span></td><td><span style="color:#00a">3305</span></td><td><span style="color:#00a">120</span></td></tr>
<tr><td>20</td><td>5894</td><td>121</td><td><span style="color:#a00">80689144</span></td><td><span style="color:#00a">5894</span></td><td><span style="color:#00a">121</span></td></tr>
</table>
<br/>
<h3># SOLUTION-2 (NULLS not supported) #</h3>
Here we just merge the original values with LEFT-PADDING of zeros.<br />
<br />
MYSQL CODE:<br />
<pre style="padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px;line-height:2;">
############ TABLE DEFINITION:
CREATE TABLE `table_test` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`sint1` SMALLINT(5) UNSIGNED NULL DEFAULT NULL,
`tint2` TINYINT(3) UNSIGNED NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE);
############ SELECT:
SELECT T.*,
SUBSTR(combined,1,LENGTH(combined)-3)+0 AS _sint1,
RIGHT(combined,3)+0 AS _tint2
FROM (
SELECT id, sint1, tint2,
CONCAT(sint1, LPAD(tint2,3,0)) AS combined
FROM table_test
) AS T
</pre>
And output will be:<br />
<table border="1" cellpadding="5" style="border-collapse:collapse">
<tr><th>id</th><th>sint1</th><th>tint2</th><th><span style="color:#a00">>combined</span></th><th><span style="color:#00a">>_sint1</span></th><th><span style="color:#00a">>_tint2</span></th></tr>
<tr><td>4</td><td>3123</td><td>38</td><td><span style="color:#a00">3123038</span></td><td><span style="color:#00a">3123</span></td><td><span style="color:#00a">38</span></td></tr>
<tr><td>5</td><td>3410</td><td>243</td><td><span style="color:#a00">3410243</span></td><td><span style="color:#00a">3410</span></td><td><span style="color:#00a">243</span></td></tr>
<tr><td>6</td><td>2685</td><td>207</td><td><span style="color:#a00">2685207</span></td><td><span style="color:#00a">2685</span></td><td><span style="color:#00a">207</span></td></tr>
<tr><td>7</td><td>1327</td><td>224</td><td><span style="color:#a00">1327224</span></td><td><span style="color:#00a">1327</span></td><td><span style="color:#00a">224</span></td></tr>
<tr><td>8</td><td>2047</td><td>102</td><td><span style="color:#a00">2047102</span></td><td><span style="color:#00a">2047</span></td><td><span style="color:#00a">102</span></td></tr>
<tr><td>9</td><td>2953</td><td>189</td><td><span style="color:#a00">2953189</span></td><td><span style="color:#00a">2953</span></td><td><span style="color:#00a">189</span></td></tr>
<tr><td>10</td><td>3686</td><td>117</td><td><span style="color:#a00">3686117</span></td><td><span style="color:#00a">3686</span></td><td><span style="color:#00a">117</span></td></tr>
<tr><td>11</td><td>4455</td><td>18</td><td><span style="color:#a00">4455018</span></td><td><span style="color:#00a">4455</span></td><td><span style="color:#00a">18</span></td></tr>
<tr><td>12</td><td>2482</td><td>66</td><td><span style="color:#a00">2482066</span></td><td><span style="color:#00a">2482</span></td><td><span style="color:#00a">66</span></td></tr>
<tr><td>13</td><td>3072</td><td>74</td><td><span style="color:#a00">3072074</span></td><td><span style="color:#00a">3072</span></td><td><span style="color:#00a">74</span></td></tr>
<tr><td>14</td><td>2036</td><td>42</td><td><span style="color:#a00">2036042</span></td><td><span style="color:#00a">2036</span></td><td><span style="color:#00a">42</span></td></tr>
<tr><td>15</td><td>2047</td><td>139</td><td><span style="color:#a00">2047139</span></td><td><span style="color:#00a">2047</span></td><td><span style="color:#00a">139</span></td></tr>
<tr><td>16</td><td>1573</td><td>236</td><td><span style="color:#a00">1573236</span></td><td><span style="color:#00a">1573</span></td><td><span style="color:#00a">236</span></td></tr>
<tr><td>17</td><td>2464</td><td>173</td><td><span style="color:#a00">2464173</span></td><td><span style="color:#00a">2464</span></td><td><span style="color:#00a">173</span></td></tr>
<tr><td>18</td><td>3656</td><td>155</td><td><span style="color:#a00">3656155</span></td><td><span style="color:#00a">3656</span></td><td><span style="color:#00a">155</span></td></tr>
<tr><td>19</td><td>3305</td><td>120</td><td><span style="color:#a00">3305120</span></td><td><span style="color:#00a">3305</span></td><td><span style="color:#00a">120</span></td></tr>
<tr><td>20</td><td>5894</td><td>121</td><td><span style="color:#a00">5894121</span></td><td><span style="color:#00a">5894</span></td><td><span style="color:#00a">121</span></td></tr>
</table>
<br />
This solution can work with two SMALLINT,<br /> if one of them limited up to 42949,<br />
and it will be the left operand.<br />
<br />
<br />
</div>sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com1tag:blogger.com,1999:blog-9087075508981084919.post-3945368542913466352020-12-03T12:48:00.007+02:002021-01-30T09:17:04.829+02:00php merge dateranges code algorithm<br /><div dir="ltr" style="text-align: left;">Here is a code for merging date-ranges in array.
The method gives new array, with the maximum mergining between the date-ranges,
meaning if there is a date-range that already exists with-in other, it can just skip,
so just if two or more dates can be combined into one big date-range - it will be made :)
. </div><div dir="ltr" style="text-align: left;"> </div>
<div dir="ltr" style="text-align: left;">-------------------------------Example #1:</div>
<div dir="ltr" style="text-align: left;">
<pre> <b>array</b>
0 <font color="#888a85">=></font> 's' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-06'</font> 'e' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-10'</font>
1 <font color="#888a85">=></font> 's' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-07'</font> 'e' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-12'</font>
2 <font color="#888a85">=></font> 's' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-13'</font> 'e' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-16'</font>
3 <font color="#888a85">=></font> 's' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-22'</font> 'e' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-24'</font>
RESULT:
<b>array</b>
0 <font color="#888a85">=></font> 's' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-06'</font> 'e' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-16'</font>
1 <font color="#888a85">=></font> 's' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-22'</font> 'e' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-24'</font>
</pre>
</div>
<div dir="ltr" style="text-align: left;"><b> </b></div><div dir="ltr" style="text-align: left;">-------------------------------Example #2:</div>
<div dir="ltr" style="text-align: left;">
<pre dir="ltr"><b>array</b> <i>(size=8)</i>
0 <font color="#888a85">=></font> 's' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-01'</font> 'e' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-01'</font>
1 <font color="#888a85">=></font> 's' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-03'</font> 'e' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-03'</font>
2 <font color="#888a85">=></font> 's' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-09'</font> 'e' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-10'</font>
3 <font color="#888a85">=></font> 's' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-11'</font> 'e' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-22'</font>
4 <font color="#888a85">=></font> 's' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-14'</font> 'e' <font color="#888a85">=></font> <font color="#cc0000">'2020-02-02'</font>
5 <font color="#888a85">=></font> 's' <font color="#888a85">=></font> <font color="#cc0000">'2020-02-02'</font> 'e' <font color="#888a85">=></font> <font color="#cc0000">'2020-02-03'</font>
6 <font color="#888a85">=></font> 's' <font color="#888a85">=></font> <font color="#cc0000">'2020-02-04'</font> 'e' <font color="#888a85">=></font> <font color="#cc0000">'2020-02-04'</font>
7 <font color="#888a85">=></font> 's' <font color="#888a85">=></font> <font color="#cc0000">'2020-02-05'</font> 'e' <font color="#888a85">=></font> <font color="#cc0000">'2020-02-07'</font>
RESULT:
<b>array</b> <i>(size=3)</i>
0 <font color="#888a85">=></font> 's' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-01'</font> 'e' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-01'</font>
1 <font color="#888a85">=></font> 's' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-03'</font> 'e' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-03'</font>
2 <font color="#888a85">=></font> 's' <font color="#888a85">=></font> <font color="#cc0000">'2020-01-09'</font> 'e' <font color="#888a85">=></font> <font color="#cc0000">'2020-02-07'</font>
</pre>
</div>
<div dir="ltr" style="text-align: left;"> </div><div dir="ltr" style="text-align: left;"> </div><div dir="ltr" style="text-align: left;">And here is the CODE: <br /></div><div dir="ltr" style="text-align: left;"><code style="color: black; overflow-wrap: normal; word-wrap: normal;">
</code><pre nbsp="" style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: rgb(240, 240, 240) none repeat scroll 0% 0%; border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; overflow-wrap: normal; word-wrap: normal;">
$arrDateranges = array(
array('s' => '2020-01-22', 'e' => '2020-01-24'),
array('s' => '2020-01-06', 'e' => '2020-01-10'),
array('s' => '2020-01-07', 'e' => '2020-01-12'),
array('s' => '2020-01-13', 'e' => '2020-01-16'),
);
$arrMerged = mergeDateRanges($arrDateranges);
var_dump($arrDateranges);
var_dump($arrMerged);
//---------------------------------------------------------
// helper funciton to get NEXT date (or any modified date)
function getRelativeDate($p_sDate, $p_sModify, $p_sFormatIn = 'Y-m-d', $p_sFormatOut = 'Y-m-d') {
$oDT = DateTime::createFromFormat($p_sFormatIn, $p_sDate);
$oDT->modify($p_sModify);
return $oDT->format($p_sFormatOut);
}
function mergeDateRanges($p_arrDateranges) {
// sort by start date
usort($p_arrDateranges, function($a1, $a2) {
return $a1['s'] === $a2['s'] ? 0 : ($a1['s'] < $a2['s'] ? -1 : 1);
});
$arrMerged = array();
$arrLastDR = null;
foreach ($p_arrDateranges as $arrDR) {
if ($arrLastDR === null) {
$arrLastDR = $arrDR;
continue;
}
//
// NOTE: dateS is sorted thus $sDateS >= $arrLastDR['s']
//
if ($arrDR['e'] <= $arrLastDR['e']) {
continue; // already in the range.
}
// --- [e] > lastDR[e] ---
$sLastDateE_1 = getRelativeDate($arrLastDR['e'], '+1 day');
if ($arrDR['s'] <= $sLastDateE_1) { // lapping date-range until day+1
$arrLastDR['e'] = $arrDR['e'];
continue;
}
// there is gap, so need to create new date-range
array_push($arrMerged, $arrLastDR);
$arrLastDR = $arrDR;
}
if ($arrLastDR === null) {
array_push($arrMerged, $arrLastDR);
}
return $arrMerged;
}
</code></pre>
</div>
sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com0tag:blogger.com,1999:blog-9087075508981084919.post-28556892237084774262020-02-24T13:22:00.000+02:002020-02-24T13:22:21.795+02:00Skype | stuck on loading screen [SOLVED] [SOLUTION]<div dir="rtl" style="text-align: right;" trbidi="on">
<div dir="ltr" style="text-align: left;">
Hello!</div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
This thread is about a <b>sign-in problem </b>of SKYPE version 8.56.0.103,</div>
<div dir="ltr" style="text-align: left;">
where the application is stuck on loading screen.</div>
<div dir="ltr" style="text-align: left;">
here:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-OouK4VedTn8/XlOw60mIsQI/AAAAAAAAAhc/-cVsGoXKFCgfGtBO2Ja8Jxa9x4107DP7QCLcBGAsYHQ/s1600/sc1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="535" data-original-width="586" height="182" src="https://1.bp.blogspot.com/-OouK4VedTn8/XlOw60mIsQI/AAAAAAAAAhc/-cVsGoXKFCgfGtBO2Ja8Jxa9x4107DP7QCLcBGAsYHQ/s200/sc1.jpg" style="border: 2px solid rgb(102, 102, 102);" width="200" /></a>
<a href="https://1.bp.blogspot.com/-pGbT0MgqREk/XlOw1-tUAII/AAAAAAAAAhU/GRBHYnsTzKM9UwRO2_AztCMxdqX20wg8ACEwYBhgL/s1600/sc2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="822" data-original-width="920" height="178" src="https://1.bp.blogspot.com/-pGbT0MgqREk/XlOw1-tUAII/AAAAAAAAAhU/GRBHYnsTzKM9UwRO2_AztCMxdqX20wg8ACEwYBhgL/s200/sc2.jpg" style="border: 2px solid rgb(102, 102, 102);" width="200" /></a>
</div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
Here is how I've solved the problem!<br />
<br />
I'm working at the moment with windows7,<br />
but i assume that the solution will work for any windows version.<br />
<br />
<b>Step1:</b><br />
make sure you have your Skype username/password saved,<br />
as you will need to re-login later on.<br />
<br />
<b>Step2:</b><br />
Make sure Skype on your desktop is closed. (if not - close/quit)<br />
<br />
<b>Step3:</b><br />
Open your appdata Local folder:<br />
<span style="font-family: "courier new" , "courier" , monospace;">C:\Users\<span style="background-color: yellow;"><i>YourUserNameHere</i></span>\AppData\Roaming</span><br />
<br />
alternative for opening the folder:<br />
- search on windows start search for %appdata%<br />
- click on <b>Roaming </b><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-kNh4eYXE0Mo/XlOw1_Ril6I/AAAAAAAAAhQ/8l0i5WM5SgEF78hAF_XWjp5hYTRfs3nYQCEwYBhgL/s1600/appdata-local-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="477" data-original-width="407" height="200" src="https://1.bp.blogspot.com/-kNh4eYXE0Mo/XlOw1_Ril6I/AAAAAAAAAhQ/8l0i5WM5SgEF78hAF_XWjp5hYTRfs3nYQCEwYBhgL/s200/appdata-local-1.png" style="border: 2px solid rgb(102, 102, 102);" width="170" /></a></div>
<br />
<br />
<br />
<br />
<b>Step4:</b><br />
On the Roaming folder, Enter <b>Microsoft </b>folder,</div>
<div dir="ltr" style="text-align: left;">
Find <b>Skype for Desktop </b>folder, and rename it to "___skype"</div>
<div dir="ltr" style="text-align: left;">
(just to have backup)</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
<b>Step5:</b></div>
<div dir="ltr" style="text-align: left;">
Just restart your skype and everything works :)</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
Let me know. </div>
<div dir="ltr" style="text-align: left;">
:)</div>
<div dir="ltr" style="text-align: left;">
:)</div>
<div dir="ltr" style="text-align: left;">
<br />
<br />
<br />
<br />
<br />
<br />
<br /></div>
</div>
sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com8tag:blogger.com,1999:blog-9087075508981084919.post-40132175916868257512016-12-22T09:37:00.000+02:002016-12-22T09:37:53.771+02:00c# | WebBrowser control - programmatically select item on html `select`<div dir="rtl" style="text-align: right;" trbidi="on">
<div dir="ltr" style="text-align: left;">
Hi There,</div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
As many times, we need to interact with the C# (.Net) Webbrowser Control, </div>
<div dir="ltr" style="text-align: left;">
it is useful to be able to interact and programmatically change the selected item </div>
<div dir="ltr" style="text-align: left;">
on an HTML select control.</div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
I don't know, why it is hard to find this easy solution, but the code is as follow:</div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<pre dir="ltr" style="background: rgb(240, 240, 240) none repeat scroll 0% 0%; border: 1px dashed rgb(204, 204, 204); color: black; font-family: "arial"; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;">HtmlElementCollection col = webBrowser1.Document.GetElementsByTagName("select")
foreach (HtmlElement heItem in col)
{
if (heItem.GetAttribute("className").Contains("exampleClassName") == true)
{
<b>heItem.SetAttribute("selectedIndex", "3");</b> // select value at #3
break; // incase of needed...
}
} </code><code style="color: black; word-wrap: normal;"><code style="color: black; word-wrap: normal;"> </code>
</code></pre>
<div dir="ltr" style="text-align: left;">
<br />
<br />
<b>And finally, just easy as u code...</b><br />
<br />
<br />
If you need change by value and not by index,<br />
I assume you can check the values of the select control (sometimes called: dropdown),<br />
and once you find the correct index of the desired value,<br />
use the code above.<br />
<br />
<br />
<br />
<b>MDB-BLOG :)</b></div>
</div>
sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com1tag:blogger.com,1999:blog-9087075508981084919.post-21891829074474233432016-10-31T17:28:00.002+02:002016-10-31T17:30:00.328+02:00List of country flags (png) by ISO3<div dir="rtl" style="text-align: right;" trbidi="on">
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
As I needed a list of country flag images named with ISO3, and couldn't find,</div>
<div dir="ltr" style="text-align: left;">
I uploaded my version free (see license on bottom).</div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
Above there are two ZIP containing country flags images (PNG format)</div>
<div dir="ltr" style="text-align: left;">
sizes of <b>64x64 </b>and <b>128x128</b> </div>
<div dir="ltr" style="text-align: left;">
of the ~250 countries</div>
<div dir="ltr" style="text-align: left;">
as the file name is <a href="http://unstats.un.org/unsd/tradekb/Knowledgebase/Country-Code" target="_blank">ISO3</a> standard </div>
<div dir="ltr" style="text-align: left;">
and not two letter (<a href="https://en.wikipedia.org/wiki/ISO_3166-2" title="ISO 3166-2">ISO 3166-2</a>) or full name as most flags out there...</div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div class="a-b-Ia-V" data-tooltip-align="b,c" data-tooltip-class="a-b-g-Ca" data-tooltip-delay="500" data-tooltip-offset="-6" data-tooltip-only-on-overflow="true" data-tooltip-unhoverable="true" data-tooltip="flags_iso3_128x128.rar" dir="ltr" style="text-align: left;">
</div>
<div class="a-b-Ia-V" data-tooltip-align="b,c" data-tooltip-class="a-b-g-Ca" data-tooltip-delay="500" data-tooltip-offset="-6" data-tooltip-only-on-overflow="true" data-tooltip-unhoverable="true" data-tooltip="flags_iso3_128x128.rar" dir="ltr" style="text-align: left;">
<b>Download flags_iso3_128x128.rar</b></div>
<div class="a-b-Ia-V" data-tooltip-align="b,c" data-tooltip-class="a-b-g-Ca" data-tooltip-delay="500" data-tooltip-offset="-6" data-tooltip-only-on-overflow="true" data-tooltip-unhoverable="true" data-tooltip="flags_iso3_128x128.rar" dir="ltr" style="text-align: left;">
<a href="http://www.megafileupload.com/gdW6/flags_iso3_128x128.rar">http://www.megafileupload.com/gdW6/flags_iso3_128x128.rar</a></div>
<div class="a-b-Ia-V" data-tooltip-align="b,c" data-tooltip-class="a-b-g-Ca" data-tooltip-delay="500" data-tooltip-offset="-6" data-tooltip-only-on-overflow="true" data-tooltip-unhoverable="true" data-tooltip="flags_iso3_128x128.rar" dir="ltr" style="text-align: left;">
<a href="https://www.sendspace.com/file/5ht6yg">https://www.sendspace.com/file/5ht6yg</a></div>
<div class="a-b-Ia-V" data-tooltip-align="b,c" data-tooltip-class="a-b-g-Ca" data-tooltip-delay="500" data-tooltip-offset="-6" data-tooltip-only-on-overflow="true" data-tooltip-unhoverable="true" data-tooltip="flags_iso3_128x128.rar" dir="ltr" style="text-align: left;">
Example:<br />
<a href="http://3.bp.blogspot.com/-Kg5ADlLXWiI/WBdjaRf43kI/AAAAAAAAAds/oisf5QqVZDkyXpL0prVnkSes3FMNyc5rQCK4B/s1600/gb_128x128.png" imageanchor="1"><img border="0" src="https://3.bp.blogspot.com/-Kg5ADlLXWiI/WBdjaRf43kI/AAAAAAAAAds/oisf5QqVZDkyXpL0prVnkSes3FMNyc5rQCK4B/s400/gb_128x128.png" /></a></div>
<div class="a-b-Ia-V" data-tooltip-align="b,c" data-tooltip-class="a-b-g-Ca" data-tooltip-delay="500" data-tooltip-offset="-6" data-tooltip-only-on-overflow="true" data-tooltip-unhoverable="true" data-tooltip="flags_iso3_128x128.rar" dir="ltr" style="text-align: left;">
</div>
<div class="a-b-Ia-V" data-tooltip-align="b,c" data-tooltip-class="a-b-g-Ca" data-tooltip-delay="500" data-tooltip-offset="-6" data-tooltip-only-on-overflow="true" data-tooltip-unhoverable="true" data-tooltip="flags_iso3_128x128.rar" dir="ltr" style="text-align: left;">
<b>Download flags_iso3_64x64.rar</b> </div>
<div class="a-b-Ia-V" data-tooltip-align="b,c" data-tooltip-class="a-b-g-Ca" data-tooltip-delay="500" data-tooltip-offset="-6" data-tooltip-only-on-overflow="true" data-tooltip-unhoverable="true" data-tooltip="flags_iso3_128x128.rar" dir="ltr" style="text-align: left;">
<a href="http://www.megafileupload.com/kq53/flags_iso3_64x64.rar">http://www.megafileupload.com/kq53/flags_iso3_64x64.rar</a></div>
<div dir="ltr" style="text-align: left;">
<a href="https://www.sendspace.com/file/bimuu8">https://www.sendspace.com/file/bimuu8</a></div>
<div dir="ltr" style="text-align: left;">
Example:<br />
<a href="http://4.bp.blogspot.com/-BbhO5bVp4CA/WBdjdI1uHeI/AAAAAAAAAd0/9zZTHv-iQtg-abagFE20vgklEYUCCNmRQCK4B/s1600/gb_64x64.png" imageanchor="1"><img border="0" src="https://4.bp.blogspot.com/-BbhO5bVp4CA/WBdjdI1uHeI/AAAAAAAAAd0/9zZTHv-iQtg-abagFE20vgklEYUCCNmRQCK4B/s400/gb_64x64.png" /></a></div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
license and images are all taken from:</div>
<div dir="ltr" style="text-align: left;">
<a href="https://github.com/stefangabos/world_countries">https://github.com/stefangabos/world_countries</a></div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
<br /></div>
</div>
sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com0tag:blogger.com,1999:blog-9087075508981084919.post-5394149381605555812016-02-13T20:11:00.001+02:002016-02-13T20:11:29.370+02:00 Free Javascript Obfuscator Online<div dir="rtl" style="text-align: right;" trbidi="on">
<div dir="ltr" id="site-description" style="text-align: left;">
Protects JavaScript code from stealing/reading and shrinks its size.</div>
<div dir="ltr" id="site-description" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
Free Javascript Obfuscator is a professional tool for obfuscation of
javascript. It Converts JavaScript source code into scrambled and
completely unreadable form, preventing it from analyzing and theft.<br />
<b>Visit: <a href="http://freejsobfuscator.com/">http://freejsobfuscator.com/</a></b><br />
<br />
u can choose if to process by your will: parameters / functions / strings / new lines / indentations and it is 100% free!<br />
<br />
</div>
</div>
sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com0tag:blogger.com,1999:blog-9087075508981084919.post-53724999574325529062015-11-22T14:13:00.001+02:002015-11-22T14:13:27.333+02:00How to install php imap extension on Centos (or any)<div dir="rtl" style="text-align: right;" trbidi="on">
<div dir="ltr" style="text-align: left;">
The php package (extension) for IMAP is usually:</div>
<div dir="ltr" style="text-align: left;">
<b>php-imap</b></div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
Sometimes, for example on amazon ec2, when installing PHP ver. 5.5 or 5.6,</div>
<div dir="ltr" style="text-align: left;">
In order to install this (or any other) PHP extension,</div>
<div dir="ltr" style="text-align: left;">
that not come with the default PHP,</div>
<div dir="ltr" style="text-align: left;">
You should installed the one related to your PHP version.</div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
For example,</div>
<div dir="ltr" style="text-align: left;">
one of my servers have PHP 5.6 installed on it,</div>
<div dir="ltr" style="text-align: left;">
but when running </div>
<div dir="ltr" style="text-align: left;">
<code style="color: black; word-wrap: normal;"></code></div>
<pre dir="ltr" style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> yum install php-imap </code></pre>
<pre dir="ltr" style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"><b>which gives:</b></code></pre>
<pre dir="ltr" style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;">Error: php56-imap conflicts with php-imap-5.3.29-1.8.amzn1.x86_64
Error: php56-common conflicts with php-common-5.3.29-1.8.amzn1.x86_64
Error: php55-common conflicts with php-common-5.3.29-1.8.amzn1.x86_64
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest </code></pre>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
<br />so instead, check first which version currently installed:<br />
<pre style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><span style="font-family: "Courier New",Courier,monospace;"><span style="font-family: "Courier New",Courier,monospace;">yum list installed | grep php</span></span></pre>
<pre style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><span style="font-family: "Courier New",Courier,monospace;"><span style="font-family: "Courier New",Courier,monospace;"> </span></span><code style="color: black; word-wrap: normal;"><b>which gives:</b></code></pre>
<pre style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><span style="font-family: "courier new" , "courier" , monospace;"><span style="font-family: "Courier New",Courier,monospace;">php56.x86_64 5.6.14-1.119.amzn1 @amzn-updates
php56-cli.x86_64 5.6.14-1.119.amzn1 @amzn-updates
php56-common.x86_64 5.6.14-1.119.amzn1 @amzn-updates
php56-imap.x86_64 5.6.14-1.119.amzn1 @amzn-updates
php56-jsonc.x86_64 1.3.6-1.19.amzn1 @amzn-main
php56-mbstring.x86_64 5.6.14-1.119.amzn1 @amzn-updates
php56-mysqlnd.x86_64 5.6.14-1.119.amzn1 @amzn-updates
php56-pdo.x86_64 5.6.14-1.119.amzn1 @amzn-updates
php56-process.x86_64 5.6.14-1.119.amzn1 @amzn-updates
php56-xml.x86_64 5.6.14-1.119.amzn1 @amzn-updates </span></span></pre>
</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
Which means that your PHP version is 5.6 (you can also run php -v)</div>
<div dir="ltr" style="text-align: left;">
<pre style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><span style="font-family: "Courier New",Courier,monospace;">php -v</span></pre>
<pre style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><span style="font-family: "Courier New",Courier,monospace;"> </span><code style="color: black; word-wrap: normal;"><b>which gives:</b></code></pre>
<pre style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><span style="font-family: "Courier New",Courier,monospace;">PHP 5.6.14 (cli) (built: Oct 16 2015 22:58:32)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies</span></pre>
</div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
All needed now is to install the correct version.</div>
<div dir="ltr" style="text-align: left;">
<b>If you install php55-imap (or any other package) it won't work!</b></div>
<div dir="ltr" style="text-align: left;">
<b>Some have several PHP versions installed.</b></div>
<div dir="ltr" style="text-align: left;">
command:<b> </b></div>
<div dir="ltr" style="text-align: left;">
<b> </b></div>
<pre style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;">yum install php56-imap</pre>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
<br /> </div>
<div dir="ltr" style="text-align: left;">
don't forget to restart your apache after that.</div>
<div dir="ltr" style="text-align: left;">
</div>
<pre style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;">service httpd restart</pre>
<div dir="ltr" style="text-align: left;">
<br /><br /> and done... :)</div>
<div dir="ltr" style="text-align: left;">
Hope it helps.</div>
</div>
sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com0tag:blogger.com,1999:blog-9087075508981084919.post-74955887642800311452015-11-13T15:43:00.000+02:002015-11-13T15:43:05.263+02:00PHP | XML to Html Table elment convertion<div dir="rtl" style="text-align: right;" trbidi="on">
<div dir="ltr" style="text-align: left;">
In this thread, <br />I will show generic & universal function that <br />gets XML string, <br />convert it,<br />and display it as an HTML table. <br />(you can add any css style to design your table later on of course)<br /><br /><br />The following code is using XML example from <a href="http://www.w3schools.com/xml/simple.xml">http://www.w3schools.com/xml/simple.xml</a>.<br />The XML looks like that:<br /><pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code><breakfast_menu>
<food>
<name>Belgian Waffles</name>
<price>$5.95</price>
<description>Two of our famous...</description>
<calories>650</calories>
</food>
<food>
<name>Strawberry Belgian Waffles</name>
<price>$7.95</price>
<description>Light Belgian waffles...</description>
<calories>900</calories>
</food>
<food>
<name>Berry-Berry Belgian Waffles</name>
<price>$8.95</price>
<description>Light Belgian....</description>
<calories>900</calories>
</food>
<food>
<name>French Toast</name>
<price>$4.50</price>
<description>Thick slices made....</description>
<calories>600</calories>
</food>
<food>
<name>Homestyle Breakfast</name>
<price>$6.95</price>
<description>Two eggs, bacon...</description>
<calories>950</calories>
</food>
</breakfast_menu></code></pre>
<br /><br /><br />The function <b>xmlToHtmlTable </b></div>
<div dir="ltr" style="text-align: left;">
gets <a href="http://php.net/manual/en/class.simplexmlelement.php" target="_blank">a SimpleXMLElement</a> parameter which points to main parent for which will print all his children,<br />and returns html table representing the XML as string.<br /><br /><b>The Code:</b></div>
<div dir="ltr" style="text-align: left;">
<pre nbsp="" style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> <?php
// get XML remotely / locally / or / just set it as string '<root>...</root>'
$sXml = file_get_contents('http://www.w3schools.com/xml/simple.xml');
// parse XML
$oXML = simplexml_load_string($sXml);
if (!$oXML) {
die('xml format not valid or simplexml module missing.');
}
// assuming running the root
$oXmlRoot = $oXML; // or can be [$oXML->food]
//echo '<pre>'; print_r( $oXmlRoot ); echo '</pre>';
echo xmlToHtmlTable($oXmlRoot);
function xmlToHtmlTable($p_oXmlRoot) {
$bIsHeaderProceessed = false;
$sTHead = '';
$sTBody = '';
foreach ($p_oXmlRoot as $oNode) {
$sTBody .= '<tr>';
foreach ($oNode as $sName => $oValue){
if (!$bIsHeaderProceessed) {
$sTHead .= "<th>{$sName}</th>";
}
$sValue = (string)$oValue;
$sTBody .= "<td>{$sValue}</td>";
}
$bIsHeaderProceessed = true;
$sTBody .= '</tr>';
}
$sHTML = "<table border=1>
<thead><tr>{$sTHead}</tr></thead>
<tbody>{$sTBody}</tbody>
</table>";
return $sHTML;
} </code></pre>
<b> </b></div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
<br />This will output:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-ZeuQFTjn9RY/VkXokZth4TI/AAAAAAAAAb0/ohaPX5WTnBY/s1600/xmlToHtmlTable.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="130" src="http://1.bp.blogspot.com/-ZeuQFTjn9RY/VkXokZth4TI/AAAAAAAAAb0/ohaPX5WTnBY/s640/xmlToHtmlTable.png" width="640" /></a></div>
<div dir="ltr" style="text-align: left;">
<br /> </div>
<div dir="ltr" style="text-align: left;">
Hope it helps!</div>
<div dir="ltr" style="text-align: left;">
MDB BLOG!<br /><br /><br /><br /><br /> </div>
</div>
sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com0tag:blogger.com,1999:blog-9087075508981084919.post-14185021296063940862015-06-19T15:00:00.000+03:002015-06-19T15:00:18.090+03:00MySQL | find median (Nth element) without join!<div dir="rtl" style="text-align: right;" trbidi="on">
<div dir="ltr" style="text-align: left;">
This is my suggestion to find on mysql select command</div>
<div dir="ltr" style="text-align: left;">
the <b>Median (Nth element)</b> without joining the table to itself (or to new custom one).</div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
My method, uses <u>string manipulation</u>, </div>
<div dir="ltr" style="text-align: left;">
so I'm not sure it is good for big tables.</div>
<div dir="ltr" style="text-align: left;">
<i>(I tested it with medium size tables on Mysql 5.5.28)</i></div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
The <u>advantage</u> of this method, </div>
<div dir="ltr" style="text-align: left;">
that it works also if we need to find the MEDIAN for each group in the select query.</div>
<div dir="ltr" style="text-align: left;">
<br />
the code is using: <a href="https://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substring-index" target="_blank"> SUBSTRING_INDEX</a> and <a href="https://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat" target="_blank">GROUP_CONCAT</a> methods.<br />
<br />
<br />
Here is test code for test table:</div>
<div dir="ltr" style="text-align: left;">
<pre class="lang-sql prettyprint prettyprinted"><code><span class="kwd">DROP</span><span class="pln"> </span><span class="kwd">TABLE</span><span class="pln"> test</span><span class="pun">.</span><span class="pln">test_median
</span><span class="kwd">CREATE</span><span class="pln"> </span><span class="kwd">TABLE</span><span class="pln"> test</span><span class="pun">.</span><span class="pln">test_median </span><span class="kwd">AS</span><span class="pln">
</span><span class="kwd">SELECT</span><span class="pln"> </span><span class="str">'book'</span><span class="pln"> </span><span class="kwd">AS</span><span class="pln"> grp</span><span class="pun">,</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="kwd">AS</span><span class="pln"> val </span><span class="kwd">UNION</span><span class="pln"> </span><span class="kwd">ALL</span><span class="pln">
</span><span class="kwd">SELECT</span><span class="pln"> </span><span class="str">'book'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">7</span><span class="pln"> </span><span class="kwd">UNION</span><span class="pln"> </span><span class="kwd">ALL</span><span class="pln">
</span><span class="kwd">SELECT</span><span class="pln"> </span><span class="str">'book'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="kwd">UNION</span><span class="pln"> </span><span class="kwd">ALL</span><span class="pln">
</span><span class="kwd">SELECT</span><span class="pln"> </span><span class="str">'book'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="kwd">UNION</span><span class="pln"> </span><span class="kwd">ALL</span><span class="pln">
</span><span class="kwd">SELECT</span><span class="pln"> </span><span class="str">'book'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">9</span><span class="pln"> </span><span class="kwd">UNION</span><span class="pln"> </span><span class="kwd">ALL</span><span class="pln">
</span><span class="kwd">SELECT</span><span class="pln"> </span><span class="str">'book'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pln"> </span><span class="kwd">UNION</span><span class="pln"> </span><span class="kwd">ALL</span><span class="pln">
</span><span class="kwd">SELECT</span><span class="pln"> </span><span class="str">'book'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="kwd">UNION</span><span class="pln"> </span><span class="kwd">ALL</span><span class="pln">
</span><span class="kwd">SELECT</span><span class="pln"> </span><span class="str">'note'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">11</span><span class="pln"> </span><span class="kwd">UNION</span><span class="pln"> </span><span class="kwd">ALL</span><span class="pln">
</span><span class="kwd">SELECT</span><span class="pln"> </span><span class="str">'bike'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">22</span><span class="pln"> </span><span class="kwd">UNION</span><span class="pln"> </span><span class="kwd">ALL</span><span class="pln">
</span><span class="kwd">SELECT</span><span class="pln"> </span><span class="str">'bike'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">26</span><span class="pln"> </span></code></pre>
<br />
<br />
<br />
and the code for finding the median for each group:<br />
<pre class="lang-sql prettyprint prettyprinted"><code><span class="kwd">SELECT</span><span class="pln"> grp</span><span class="pun">,</span><span class="pln">
SUBSTRING_INDEX</span><span class="pun">(</span><span class="pln"> SUBSTRING_INDEX</span><span class="pun">(</span><span class="pln"> GROUP_CONCAT</span><span class="pun">(</span><span class="pln">val </span><span class="kwd">ORDER</span><span class="pln"> </span><span class="kwd">BY</span><span class="pln"> val</span><span class="pun">),</span><span class="pln"> </span><span class="str">','</span><span class="pun">,</span><span class="pln"> COUNT</span><span class="pun">(*)/</span><span class="lit">2</span><span class="pln"> </span><span class="pun">),</span><span class="pln"> </span><span class="str">','</span><span class="pun">,</span><span class="pln"> </span><span class="lit">-1</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">as</span><span class="pln"> the_median</span><span class="pun">,</span><span class="pln">
GROUP_CONCAT</span><span class="pun">(</span><span class="pln">val </span><span class="kwd">ORDER</span><span class="pln"> </span><span class="kwd">BY</span><span class="pln"> val</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">as</span><span class="pln"> all_vals_for_debug
</span><span class="kwd">FROM</span><span class="pln"> test</span><span class="pun">.</span><span class="pln">test_median
</span><span class="kwd">GROUP</span><span class="pln"> </span><span class="kwd">BY</span><span class="pln"> grp</span></code></pre>
<pre class="lang-sql prettyprint prettyprinted"><code><span class="pln">
</span></code></pre>
The output:<br />
<br />
<table border="1" caption="test_median (3 rows)">
<thead>
<tr>
<th class="col0">grp</th>
<th class="col1">the_median</th>
<th class="col2">all_vals_for_debug</th>
</tr>
</thead>
<tbody>
<tr>
<td class="col0">bike</td>
<td class="col1">22</td>
<td class="col2">22,26</td>
</tr>
<tr>
<td class="col0">book</td>
<td class="col1">4</td>
<td class="col2">2,2,3,4,7,8,9</td>
</tr>
<tr>
<td class="col0">note</td>
<td class="col1">11</td>
<td class="col2">11</td>
</tr>
</tbody>
</table>
<br />
<br />
Hope it helps you there...<br />
<br />
<pre class="lang-sql prettyprint prettyprinted"><code><span class="pln"></span></code></pre>
<br /></div>
</div>
sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com0tag:blogger.com,1999:blog-9087075508981084919.post-29742574941772017942015-05-27T12:11:00.002+03:002016-02-19T12:52:43.124+02:00php | destroy/delete all sessions<div dir="rtl" style="text-align: right;" trbidi="on">
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
I recently searched for an option deleting all <u>running</u>/<u>active</u> sessions,</div>
<div dir="ltr" style="text-align: left;">
for changing some important logic on my server.</div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
Important:</div>
<div dir="ltr" style="text-align: left;">
<b>just restarting apache won't help!</b></div>
<div dir="ltr" style="text-align: left;">
because php handles php-sessions by itself.</div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
now,</div>
<div dir="ltr" style="text-align: left;">
I wonder how to make it, without changing php code.</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
The solution, is to <b>delete the PHP session files</b> created by PHP engine.</div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
<u>Step #1 - find where PHP store php files</u></div>
<div dir="ltr" style="text-align: left;">
on php.ini there is configured <a href="http://php.net/manual/en/session.configuration.php" target="_blank">session.save_path</a> </div>
<div dir="ltr" style="text-align: left;">
which points to the correct path.</div>
<div dir="ltr" style="text-align: left;">
by default, it configured to "" (empty), and it is:</div>
<br />
<div dir="ltr" style="text-align: left;">
</div>
<br />
<br />
<ul dir="ltr" style="text-align: left;">
<li>On Ubuntu or Debian machines: saved on <span style="font-family: "courier new" , "courier" , monospace;">/var/lib/php5 </span><br /><span style="font-family: "courier new" , "courier" , monospace;"></span></li>
<li>On RHEL and CentOS systems: saved on <span style="font-family: "courier new" , "courier" , monospace;">/var/lib/php/session</span></li>
<li>If you need to find it: print <a href="http://php.net/manual/en/function.session-save-path.php" target="_blank">session_save_path()</a> on your php file. You may run from command line: <span style="font-family: "courier new" , "courier" , monospace;">php -r 'echo session_save_path(), "\n";'</span><i>
</i></li>
</ul>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
<u>Step #2 - just delete the files</u></div>
<div dir="ltr" style="text-align: left;">
Execute the following bash script:</div>
<div dir="ltr" style="text-align: left;">
<div dir="ltr" style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace;">rm -<span style="font-family: "courier new" , "courier" , monospace;"><span style="font-family: "courier new" , "courier" , monospace;"><span style="font-family: "courier new" , "courier" , monospace;">f</span></span></span> /var/lib/php/session/*</span><br />
<div dir="ltr" style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace;">or </span><br />
<span style="font-family: "courier new" , "courier" , monospace;">rm -f<span style="font-family: "courier new" , "courier" , monospace;"><span style="font-family: "courier new" , "courier" , monospace;"></span></span> <span style="font-family: "courier new" , "courier" , monospace;">/var/lib/php5/sess</span>*</span></div>
</div>
</div>
<div dir="ltr" style="text-align: left;">
(-f will force delete without prompting!!)<span style="font-family: "courier new" , "courier" , monospace;"> </span></div>
<div dir="ltr" style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span></div>
<div dir="ltr" style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span></div>
<div dir="ltr" style="text-align: left;">
<br />
And that's it...</div>
<div dir="ltr" style="text-align: left;">
Now when a user will execute web-request, </div>
<div dir="ltr" style="text-align: left;">
his session will be considered empty, </div>
<div dir="ltr" style="text-align: left;">
and will be re-generated (<u>under the same session name</u>)</div>
<div dir="ltr" style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span></div>
<div dir="ltr" style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span></div>
<div dir="ltr" style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span></div>
<div dir="ltr" style="text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span></div>
</div>
sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com0tag:blogger.com,1999:blog-9087075508981084919.post-50458179328103157082014-12-25T15:23:00.001+02:002014-12-25T15:23:44.611+02:00NSIS | create CENTER aligned text control<div dir="rtl" style="text-align: right;" trbidi="on">
<div dir="ltr" style="text-align: left;">
I searched on the internet for CENTER LABEL on NSIS,</div>
<div dir="ltr" style="text-align: left;">
but didn't find.</div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
I saw that the ${SS_CENTER} style, not working with ${NSD_CreateLabel}</div>
<div dir="ltr" style="text-align: left;">
So I build my own code, using the STATIC control.</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
<br /></div>
<blockquote class="tr_bq" dir="ltr" style="text-align: left;">
nsDialogs::CreateControl STATIC ${WS_VISIBLE}|${WS_CHILD}|${SS_CENTER} 0 29 180 439 60 "WELCOME TEXT"<br />
Pop $0<br />
CreateFont $1 "Arial" 9<br />
SendMessage $0 ${WM_SETFONT} $1 1<br />
SetCtlColors $0 0x000000 '0xff0000'</blockquote>
<br />
<div dir="ltr" style="text-align: left;">
<br /></div>
<div dir="ltr" style="text-align: left;">
Hope it help...</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
</div>
</div>
sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com0tag:blogger.com,1999:blog-9087075508981084919.post-25671576091945750492013-02-13T16:30:00.000+02:002013-02-14T08:46:09.331+02:00c# Winforms WebBrowser - Clear all cookies<div dir="ltr" style="text-align: left;">
<div>Hello,</div>
<div></div>
<div>
I recently search for a method to delete all cookies from the build in .NET WinForms <a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.aspx" target="_blank">WebBrowser</a> control.</div>
<div>
</div>
<div>
I didn't found any <b>working </b>solution for it, nor working example.</div>
<div>
It being told to use <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa385114%28v=vs.85%29.aspx" target="_blank">InternetSetOption,</a> but nothing found about it.</div>
<div>
</div>
<div>
So, i will write here my solution for <b>clearing and deleting all cookies.</b></div>
<div>
My solution using <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa385114%28v=vs.85%29.aspx" target="_blank">InternetSetOption</a> with the option flag: <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa385328%28v=vs.85%29.aspx#INTERNET_OPTION_SUPPRESS_BEHAVIOR" target="_blank">INTERNET_OPTION_SUPPRESS_BEHAVIOR</a>, which described as:</div>
<div dir="ltr" style="border: 1px solid black; text-align: left;">
<i></i>
<br />
<i>A general purpose option that is used to suppress behaviors on a process-wide basis. The lpBuffer parameter of the function must be a pointer to a DWORD containing the specific behavior to suppress. This option cannot be queried with InternetQueryOption.</i>
</div>
<div>
</div>
<div>
<br />
This option flag should be used together with INTERNET_SUPPRESS_COOKIE_PERSIST options, which means:<br />
<div dir="ltr" style="border: 1px solid black; text-align: left;">
<i></i>
<br />
<i>Suppresses the persistence of cookies, even if the server has specified them as persistent.</i></div>
<br />
<br />
So the example code for it will be:</div>
</div>
<pre style="background-color: #f1f1f1; border: 1px solid black; padding: 10px; white-space: pre-wrap;">static void Main()
{
SuppressWininetBehavior();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
[System.Runtime.InteropServices.DllImport("wininet.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = true)]
public static extern bool InternetSetOption(int hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength);
private static unsafe void SuppressWininetBehavior()
{
/* SOURCE: http://msdn.microsoft.com/en-us/library/windows/desktop/aa385328%28v=vs.85%29.aspx
* INTERNET_OPTION_SUPPRESS_BEHAVIOR (81):
* A general purpose option that is used to suppress behaviors on a process-wide basis.
* The lpBuffer parameter of the function must be a pointer to a DWORD containing the specific behavior to suppress.
* This option cannot be queried with InternetQueryOption.
*
* INTERNET_SUPPRESS_COOKIE_PERSIST (3):
* Suppresses the persistence of cookies, even if the server has specified them as persistent.
* Version: Requires Internet Explorer 8.0 or later.
*/
int option = (int)3/* INTERNET_SUPPRESS_COOKIE_PERSIST*/;
int* optionPtr = &option;
bool success = InternetSetOption(0, 81/*INTERNET_OPTION_SUPPRESS_BEHAVIOR*/, new IntPtr(optionPtr), sizeof(int));
if (!success)
{
MessageBox.Show("Something went wrong !>?");
}
}
</pre>
<div dir="ltr" style="text-align: left; ">
<br />
Please make sure your project is allows unsafe code. (under Properties => Build Tab)
<br />
<br />
This code is deleting the COOKIES per PROCESS on startup ONLY. <br />
[tested on WIN-7 and working great]<br />
<br />
<br />
Best Regards,
<br />
MDB-BLOG :)
</div>
sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com9tag:blogger.com,1999:blog-9087075508981084919.post-71315239623457121742013-02-10T14:51:00.001+02:002013-02-10T14:51:44.267+02:00MySQL xpath ExtractValue with delimiter<div dir="rtl" style="text-align: right;" trbidi="on">
<div dir="ltr" style="text-align: left;">
Hello,</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
I recently noticed the XPATH option inside MySQL.</div>
<div dir="ltr" style="text-align: left;">
What a wonderfull way for handling XML. (<a href="http://dev.mysql.com/doc/refman/5.1/en/xml-functions.html">http://dev.mysql.com/doc/refman/5.1/en/xml-functions.html</a>)</div>
<div dir="ltr" style="text-align: left;">
</div>
<div dir="ltr" style="text-align: left;">
I used <a href="http://dev.mysql.com/doc/refman/5.1/en/xml-functions.html#function_extractvalue" target="_blank">ExtractFunction</a>, and noticed that this function is <strong>space</strong> delimited:</div>
<div dir="ltr" style="text-align: left;">
<div style="border: 1px solid black;">
<em>Because </em><code class="literal"><em>ExtractValue()</em></code><em> returns multiple matches as a single space-delimited string</em></div>
<br />
So I needed to create the same function with custom text delimted (comma, semi-colon or anything you want).<br />
<br />
The function called: <strong>EXTRACTVALUE_ALL </strong>which is the same as <strong><span style="color: navy;">EXTRACTVALUE </span></strong>just get a delimiter text to seperate between results. (seperated text).<br />
<u><span style="background-color: yellow;">Tested on MySQL 5.5.28.</span></u><br />
<br />
</div>
<div dir="ltr" style="text-align: left;">
<strong>Create Function CODE:</strong><!--StartFragment--><br />
<pre class="Cpp" name="code" style="background-color: #f1f1f1; border: 1px solid black; padding: 10px;"><pre><code><span class="sql1-reservedword"><strong><span style="color: blue;">DROP</span></strong></span><span class="sql1-space"> </span><span class="sql1-reservedword"><strong><span style="color: blue;">FUNCTION</span></strong></span><span class="sql1-space"> </span><span class="sql1-function"><strong><span style="color: navy;">IF</span></strong></span><span class="sql1-space"> </span><span class="sql1-reservedword"><strong><span style="color: blue;">EXISTS</span></strong></span><span class="sql1-space"> </span><span class="sql1-identifier"><span style="color: olive;">EXTRACTVALUE_ALL</span></span><span class="sql1-symbol"><span style="color: blue;">;</span></span></code></pre>
<pre><code><span class="sql1-symbol"><span style="color: blue;">
</span></span></code></pre>
<pre><code><span class="sql1-symbol"></span><span class="sql1-identifier"><span style="color: olive;">DELIMITER</span></span><span class="sql1-space"> </span><span style="color: blue;"><span class="sql1-symbol">|
</span><span class="sql1-reservedword"><strong>CREATE</strong></span></span><span class="sql1-space"> </span><span class="sql1-reservedword"><strong><span style="color: blue;">FUNCTION</span></strong></span><span class="sql1-space"> </span><span class="sql1-identifier"><span style="color: olive;">EXTRACTVALUE_ALL</span></span><span class="sql1-symbol"><span style="color: blue;">(</span></span><span class="sql1-identifier"><span style="color: olive;">p_xml</span></span><span class="sql1-space"> </span><span class="sql1-datatype"><strong><span style="color: maroon;">TEXT</span></strong></span><span class="sql1-symbol"><span style="color: blue;">,</span></span><span class="sql1-space"> </span><span class="sql1-identifier"><span style="color: olive;">p_xpathExpr</span></span><span class="sql1-space"> </span><span class="sql1-datatype"><strong><span style="color: maroon;">TEXT</span></strong></span><span class="sql1-symbol"><span style="color: blue;">,</span></span><span class="sql1-space"> </span><span class="sql1-identifier"><span style="color: olive;">p_delimiter</span></span><span class="sql1-space"> </span><span class="sql1-datatype"><strong><span style="color: maroon;">TEXT</span></strong></span><span class="sql1-symbol"><span style="color: blue;">)</span></span><span class="sql1-space"> </span><span class="sql1-reservedword"><strong><span style="color: blue;">RETURNS</span></strong></span><span class="sql1-space"> </span><strong><span class="sql1-datatype"><span style="color: maroon;">TEXT
</span></span><span class="sql1-reservedword"><span style="color: blue;">BEGIN
</span></span><span class="sql1-plsql-reservedword">DECLARE</span></strong><span class="sql1-space"> </span><span class="sql1-identifier"><span style="color: olive;">total_elements</span></span><span class="sql1-space"> </span><span class="sql1-datatype"><strong><span style="color: maroon;">INT</span></strong></span><span class="sql1-symbol"><span style="color: blue;">;
</span></span><span class="sql1-plsql-reservedword"><strong>DECLARE</strong></span><span class="sql1-space"> </span><span class="sql1-identifier"><span style="color: olive;">xpath_expression_count</span></span><span class="sql1-symbol"><span style="color: blue;">,</span></span><span class="sql1-space"> </span><span class="sql1-identifier"><span style="color: olive;">xpath_expression_index</span></span><span class="sql1-space"> </span><span class="sql1-datatype"><strong><span style="color: maroon;">TEXT</span></strong></span><span class="sql1-symbol"><span style="color: blue;">;
</span></span><span class="sql1-plsql-reservedword"><strong>DECLARE</strong></span><span class="sql1-space"> </span><span class="sql1-identifier"><span style="color: olive;">single_tag</span></span><span class="sql1-symbol"><span style="color: blue;">,</span></span><span class="sql1-space"> </span><span class="sql1-identifier"><span style="color: olive;">result</span></span><span class="sql1-space"> </span><span class="sql1-datatype"><strong><span style="color: maroon;">TEXT</span></strong></span><span class="sql1-symbol"><span style="color: blue;">;
</span></span><span class="sql1-comment"><em><span style="color: grey;"># calc TOTAL elements
</span></em></span><span class="sql1-reservedword"><strong><span style="color: blue;">SET</span></strong></span><span class="sql1-space"> </span><span class="sql1-identifier"><span style="color: olive;">xpath_expression_count</span></span><span class="sql1-space"> </span><span class="sql1-symbol"><span style="color: blue;">=</span></span><span class="sql1-space"> </span><span class="sql1-function"><strong><span style="color: navy;">CONCAT</span></strong></span><span class="sql1-symbol"><span style="color: blue;">(</span></span><span class="sql1-string"><span style="color: green;">'count('</span></span><span class="sql1-symbol"><span style="color: blue;">,</span></span><span class="sql1-space"> </span><span class="sql1-identifier"><span style="color: olive;">p_xpathExpr</span></span><span class="sql1-symbol"><span style="color: blue;">,</span></span><span class="sql1-space"> </span><span class="sql1-string"><span style="color: green;">')'</span></span><span style="color: blue;"><span class="sql1-symbol">);
</span><span class="sql1-reservedword"><strong>SELECT</strong></span></span><span class="sql1-space"> </span><span class="sql1-function"><strong><span style="color: navy;">EXTRACTVALUE</span></strong></span><span class="sql1-symbol"><span style="color: blue;">(</span></span><span class="sql1-identifier"><span style="color: olive;">p_xml</span></span><span class="sql1-symbol"><span style="color: blue;">,</span></span><span class="sql1-space"> </span><span class="sql1-identifier"><span style="color: olive;">xpath_expression_count</span></span><span class="sql1-symbol"><span style="color: blue;">)</span></span><span class="sql1-space"> </span><span class="sql1-reservedword"><strong><span style="color: blue;">INTO</span></strong></span><span class="sql1-space"> </span><span class="sql1-identifier"><span style="color: olive;">total_elements</span></span><span class="sql1-symbol"><span style="color: blue;">;
</span></span><span class="sql1-comment"><em><span style="color: grey;"># run over elements (create long text)
</span></em></span><span class="sql1-reservedword"><strong><span style="color: blue;">SET</span></strong></span><span class="sql1-space"> </span><span class="sql1-identifier"><span style="color: olive;">result</span></span><span class="sql1-space"> </span><span class="sql1-symbol"><span style="color: blue;">=</span></span><span class="sql1-space"> </span><span class="sql1-string"><span style="color: green;">''</span></span><span style="color: blue;"><span class="sql1-symbol">;
</span><span class="sql1-reservedword"><strong>SET</strong></span></span><span class="sql1-space"> </span><span class="sql1-identifier"><span style="color: olive;">xpath_expression_index</span></span><span class="sql1-space"> </span><span class="sql1-symbol"><span style="color: blue;">=</span></span><span class="sql1-space"> </span><span class="sql1-function"><strong><span style="color: navy;">CONCAT</span></strong></span><span class="sql1-symbol"><span style="color: blue;">(</span></span><span class="sql1-identifier"><span style="color: olive;">p_xpathExpr</span></span><span class="sql1-symbol"><span style="color: blue;">,</span></span><span class="sql1-space"> </span><span class="sql1-string"><span style="color: green;">'[$@i]'</span></span><span style="color: blue;"><span class="sql1-symbol">);
</span><span class="sql1-reservedword"><strong>SET</strong></span></span><span class="sql1-space"> </span><span class="sql1-symbol"><span style="color: blue;">@</span></span><span class="sql1-identifier"><span style="color: olive;">i</span></span><span class="sql1-space"> </span><span class="sql1-symbol"><span style="color: blue;">=</span></span><span class="sql1-space"> </span><span class="sql1-number"><span style="color: purple;">1</span></span><span class="sql1-symbol"><span style="color: blue;">;
</span></span><span class="sql1-plsql-reservedword"><strong>WHILE</strong></span><span class="sql1-space"> </span><span class="sql1-symbol"><span style="color: blue;">@</span></span><span class="sql1-identifier"><span style="color: olive;">i</span></span><span class="sql1-space"> </span><span class="sql1-symbol"><span style="color: blue;"><=</span></span><span class="sql1-space"> </span><span class="sql1-identifier"><span style="color: olive;">total_elements</span></span><span class="sql1-space"> </span><strong><span class="sql1-plsql-reservedword">DO
</span><span class="sql1-reservedword"><span style="color: blue;">SET</span></span></strong><span class="sql1-space"> </span><span class="sql1-identifier"><span style="color: olive;">single_tag</span></span><span class="sql1-space"> </span><span class="sql1-symbol"><span style="color: blue;">=</span></span><span class="sql1-space"> </span><span class="sql1-function"><strong><span style="color: navy;">EXTRACTVALUE</span></strong></span><span class="sql1-symbol"><span style="color: blue;">(</span></span><span class="sql1-identifier"><span style="color: olive;">p_xml</span></span><span class="sql1-symbol"><span style="color: blue;">,</span></span><span class="sql1-space"> </span><span class="sql1-identifier"><span style="color: olive;">xpath_expression_index</span></span><span style="color: blue;"><span class="sql1-symbol">);
</span><span class="sql1-reservedword"><strong>SET</strong></span></span><span class="sql1-space"> </span><span class="sql1-identifier"><span style="color: olive;">result</span></span><span class="sql1-space"> </span><span class="sql1-symbol"><span style="color: blue;">=</span></span><span class="sql1-space"> </span><span class="sql1-function"><strong><span style="color: navy;">IF</span></strong></span><span class="sql1-symbol"><span style="color: blue;">(</span></span><span class="sql1-identifier"><span style="color: olive;">result</span></span><span class="sql1-symbol"><span style="color: blue;">=</span></span><span class="sql1-string"><span style="color: green;">''</span></span><span class="sql1-symbol"><span style="color: blue;">,</span></span><span class="sql1-space"> </span><span class="sql1-identifier"><span style="color: olive;">single_tag</span></span><span class="sql1-symbol"><span style="color: blue;">,</span></span><span class="sql1-space"> </span><span class="sql1-function"><strong><span style="color: navy;">CONCAT</span></strong></span><span class="sql1-symbol"><span style="color: blue;">(</span></span><span class="sql1-identifier"><span style="color: olive;">result</span></span><span class="sql1-symbol"><span style="color: blue;">,</span></span><span class="sql1-space"> </span><span class="sql1-identifier"><span style="color: olive;">p_delimiter</span></span><span class="sql1-symbol"><span style="color: blue;">,</span></span><span class="sql1-space"> </span><span class="sql1-identifier"><span style="color: olive;">single_tag</span></span><span style="color: blue;"><span class="sql1-symbol">));
</span><span class="sql1-reservedword"><strong>SET</strong></span></span><span class="sql1-space"> </span><span class="sql1-symbol"><span style="color: blue;">@</span></span><span class="sql1-identifier"><span style="color: olive;">i</span></span><span class="sql1-space"> </span><span class="sql1-symbol"><span style="color: blue;">=</span></span><span class="sql1-space"> </span><span class="sql1-symbol"><span style="color: blue;">@</span></span><span class="sql1-identifier"><span style="color: olive;">i</span></span><span class="sql1-space"> </span><span class="sql1-symbol"><span style="color: blue;">+</span></span><span class="sql1-space"> </span><span class="sql1-number"><span style="color: purple;">1</span></span><span style="color: blue;"><span class="sql1-symbol">;
</span><span class="sql1-reservedword"><strong>END</strong></span></span><span class="sql1-space"> </span><span class="sql1-plsql-reservedword"><strong>WHILE</strong></span><span class="sql1-symbol"><span style="color: blue;">;
</span></span><span class="sql1-comment"><em><span style="color: grey;"># return total result
</span></em></span><span class="sql1-reservedword"><strong><span style="color: blue;">RETURN</span></strong></span><span class="sql1-space"> </span><span class="sql1-identifier"><span style="color: olive;">result</span></span><span style="color: blue;"><span class="sql1-symbol">;
</span><span class="sql1-reservedword"><strong>END</strong></span></span><span class="sql1-space"> </span><span class="sql1-symbol"><span style="color: blue;">|
</span></span></code></pre>
</pre>
<br />
<br />
<strong>Usage Code:</strong><br />
<pre class="Cpp" name="code" style="background-color: #f1f1f1; border: 1px solid black; padding: 10px;">SET @XXXMMMMLLL = '<root> <a1> <time>time1</time> </a1> <a1> <time>time2</time> </a1></root>';
SELECT EXTRACTVALUE_ALL(@XXXMMMMLLL, '/descendant-or-self::time', ' | ');
</pre>
<br />
<br />
<strong>Output:</strong><br />
<pre class="Cpp" name="code" style="background-color: #f1f1f1; border: 1px solid black; padding: 10px;">time1 | time2
</pre>
<br />
<br />
Rememeber that you will need a MYSQL permission for creating new functions.<br />
<br />
MDB-BLOG :)<br />
<br />
</div>
</div>
sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com0tag:blogger.com,1999:blog-9087075508981084919.post-28595680664358919922013-01-02T12:43:00.000+02:002013-01-07T15:56:20.613+02:00NSIS - Launch a program as user from UAC elevated installer<div dir="rtl" style="text-align: right;" trbidi="on">
<div style="direction: ltr;">
<div style="text-align: left;">
<a href="http://nsis.sourceforge.net/Main_Page">NSIS</a> - Launch a program as user from <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/bb756996.aspx">UAC</a> elevated installer</div>
<div style="text-align: left;">
==========================================</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
I noticed that if a program is running as <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/bb756996.aspx">UAC</a> elevated (admin or high user privileges), </div>
<div style="text-align: left;">
any opening process by this process will get the same privileges as the executing program,</div>
<div style="text-align: left;">
which means, that any process opened by this <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/bb756996.aspx">UAC</a> elevated program <strong>will be elevated also</strong>.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
I found a solution for it, for opening the process UN-ELEVATED from ELEVATED running program.<br />
I show this information as for NSIS installer, but can be used in ANY development environment (C#, NSIS, C++, JAVA, VB, and any).<br />
<br />
The idea is to run the process in UN-ELEVATED mode, using windows's file explorer process `explorer.exe` (<a href="http://en.wikipedia.org/wiki/File_Explorer_(Windows)">info</a>).<br />
Lets say the process that we want to launch is on `$TEMP\MyUnElevatedProcess.exe`.<br />
So, for NSIS code, I will just write:<br />
<br />
<pre class="Cpp" name="code" style="background-color: #f1f1f1; border: 1px solid black; padding: 10px;">Exec '"$WINDIR\explorer.exe" "$TEMP\MyUnElevatedProcess.exe"'
</pre>
<br />
And this will do the work...<br />
The process `MyUnElevatedProcess.exe` will run with same ELEVATION that have your windows login, as have `$WINDIR\explorer.exe`.<br />
<br />
<span style="background-color: #f1f1f1;"><br /></span>
<u><strong>Execute with parameters:</strong></u><br />
In addition, if the UN-ELEVATED process need to executed with parameters, you will need to create another file that executes the UN-ELEVATED process (for example a BATCH file which just run the process with the command line parameters).<br />
a good example can be:<br />
<pre class="Cpp" name="code" style="background-color: #f1f1f1; border: 1px solid black; padding: 10px;">; assuming that the file `MyUnElevatedProcess.exe` exists on `$TEMP\`
; create shortcut with ARGUMENTS
CreateShortCut "$TEMP\Shortcut.lnk" "$TEMP\MyUnElevatedProcess.exe" "/arg1 /arg2 /arg3"
; execute the file NON elevated
Exec '"$WINDIR\explorer.exe" "$TEMP\Shortcut.lnk"'
</pre>
<br />
<br />
Remember,<br />
if your main program (the executing), is not ELEVATED, this logic is not relevant, because then you can just run `<span style="background-color: #f1f1f1;">Exec` </span>(open-process function in NSIS) which will have the same elevation as your process.<br />
<br />
I hope it helps,<br />
<a href="http://mdb-blog.blogspot.com/">MDB-BLOG</a><br />
<br /></div>
</div>
</div>
sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com13tag:blogger.com,1999:blog-9087075508981084919.post-85581537776199732272011-05-22T10:23:00.001+03:002011-05-22T10:25:22.319+03:00c# WinForm | Check form window size and location<div dir="ltr" style="text-align: left;" trbidi="on">Hello,<br />
<br />
<br />
I wanted to open a new window form, exactly near another form. (pinning one form to another).<br />
Because of the border difference among Windows XP, Vista and Windows7 (win7), <b>it didn't work easily</b>.<br />
<br />
So to determine windows size under win7/vista, I had to check if <a href="http://windows.microsoft.com/en-US/windows-vista/What-is-Windows-Aero">Windows Aero</a>. (checking made by short&easy code)<br />
<br />
Now, after checking this, I had to also support winXP (which does not have AERO technology).<br />
<br />
For finding the left and right window border size (width) I used the <a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.systeminformation.aspx">SystemInformation Class</a> which provides information about the current system environment.<br />
<br />
Note:<br />
I recommend to check if it works for other <a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.form.formborderstyle.aspx">FormBorderStyle</a>.<br />
<br />
The code:<br />
<div align="left" dir="ltr" style="background-color: #f0f0f0; border-bottom: black 1px solid; border-left: black 1px solid; border-right: black 1px solid; border-top: black 1px solid;">internal static bool IsAeroEnabled()<br />
{<br />
bool isEnabled = false;<br />
if (Environment.OSVersion.Version.Major >= 6)<br />
{<br />
try<br />
{<br />
DwmIsCompositionEnabled(out isEnabled);<br />
}<br />
catch (Exception ex)<br />
{<br />
Logger.WriteLog(ex);<br />
}<br />
}<br />
return isEnabled;<br />
}<br />
[DllImport("dwmapi.dll")]<br />
internal static extern int DwmIsCompositionEnabled(out bool enabled);</div><br />
Best regard,<br />
<a href="http://mdb-blog.blogspot.com/">MDB Blog</a></div>sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com0tag:blogger.com,1999:blog-9087075508981084919.post-30150005666557278932011-05-02T10:33:00.000+03:002011-05-02T10:33:43.305+03:00Check HOSTS file - C# WinForms<div dir="ltr" style="text-align: left;" trbidi="on">Hello,<br />
<br />
In today's post i'm giving a good <u>(and simple)</u> anti-hacking tool which allow your application to CHECK for any changes in the <a href="http://en.wikipedia.org/wiki/Hosts_%28file%29" target="_blank">Windows HOSTS file</a>.<br />
<br />
So, the operation is simple:<br />
Just read the hosts file content, and validate that <u>your site DNS</u> is not included in the list. <br />
[basiclly, check if hosts file contains your dns name]<br />
if so, the user probably is trying to <b>bypass your server</b> so you can stop him from doing so.<br />
<br />
The code:<br />
<div align="left" dir="ltr" style="background-color: #f0f0f0; border-bottom: black 1px solid; border-left: black 1px solid; border-right: black 1px solid; border-top: black 1px solid;"><span style='margin-bottom:0in;margin-bottom:.0001pt;line-height:
normal;mso-layout-grid-align:none;text-autospace:none'><span style='font-size:
9.5pt;font-family:Consolas;color:blue'>static</span><span style='font-size:
9.5pt;font-family:Consolas'> <span style='color:blue'>bool</span> IsDnsByPassed(<span style='color:blue'>string</span> p_dnsName)<o:p></o:p></span></span><br />
<span style='margin-bottom:0in;margin-bottom:.0001pt;line-height:
normal;mso-layout-grid-align:none;text-autospace:none'><span style='font-size:
9.5pt;font-family:Consolas'>{<o:p></o:p></span></span><br />
<span style='margin-bottom:0in;margin-bottom:.0001pt;line-height:
normal;mso-layout-grid-align:none;text-autospace:none'><span style='font-size:
9.5pt;font-family:Consolas'><span style='mso-spacerun:yes'> </span><span
style='color:blue'>string</span> path = <span style='color:#2B91AF'>Path</span>.Combine(<span
style='color:#2B91AF'>Environment</span>.GetFolderPath(<span style='color:#2B91AF'>Environment</span>.<span
style='color:#2B91AF'>SpecialFolder</span>.System), <span style='color:#A31515'>@"drivers\etc\hosts"</span>);<o:p></o:p></span></span><br />
<span style='margin-bottom:0in;margin-bottom:.0001pt;line-height:
normal;mso-layout-grid-align:none;text-autospace:none'><span style='font-size:
9.5pt;font-family:Consolas'><span style='mso-spacerun:yes'> </span><span
style='color:blue'>string</span> hostsText = <span style='color:#2B91AF'>File</span>.ReadAllText(path);<o:p></o:p></span></span><br />
<span style='margin-bottom:0in;margin-bottom:.0001pt;line-height:
normal;mso-layout-grid-align:none;text-autospace:none'><span style='font-size:
9.5pt;font-family:Consolas'><span style='mso-spacerun:yes'> </span><span
style='color:blue'>return</span> hostsText.ToLower().Contains(p_dnsName.ToLower());<o:p></o:p></span></span><br />
<span style='margin-bottom:0in;margin-bottom:.0001pt;line-height:
normal;mso-layout-grid-align:none;text-autospace:none'><span style='font-size:
9.5pt;font-family:Consolas'>}<o:p></o:p></span></span><br />
</div><br />
Note:<br />
Although reading the HOSTS file is allowed to all user, <b>do not</b> try to <b>edit</b> the HOSTS file, because on Vista & Windows7 this operation is allowed only for administrators. if your application is NOT running as Admin, then you won't have permission for this (and an <a href="http://msdn.microsoft.com/en-us/library/system.exception.aspx">Exception</a> will be thrown).<br />
<br />
Best regard,<br />
<a href="http://mdb-blog.blogspot.com/">MDB-Blog</a></div>sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com2tag:blogger.com,1999:blog-9087075508981084919.post-62500973839207144962011-02-10T10:12:00.000+02:002011-02-10T10:12:09.088+02:00MSI | Embed images inside MSI installer file<div dir="ltr" style="text-align: left;" trbidi="on">In this post I show how to embed images inside MSI installer file.<br />
<br />
The first try i made was to try adding splash image and banners to the installer through Visual-Studio User-Interface. (just added two jpg files into "Common Files Folder", and set the <a href="http://msdn.microsoft.com/en-us/library/8s4dddtk(v=vs.80).aspx">SplashBitmap</a> and <a href="http://msdn.microsoft.com/en-us/library/3kbk77sf.aspx">BannerBitmap</a> attributes). But doing so, created a problem - when changing the image, new version installer did NOT changed the images (or the images disappeared).<br />
So i needed another solution...<br />
<br />
The next solution is just to INSERT those images (banner&splash) <b>directly</b> into the MSI file created by Visual-Studio.<br />
I created file <b>run.js</b> file, which automaticlly runs when the build process finished, and edits the MSI. This is achieved by setting the <a herf="http://msdn.microsoft.com/en-us/library/6h314436.aspx" href="">PostBuildEvent</a> on the Windows Installer project. <br />
<br />
The event that added is to the PostBuildEvent: (remember to copy the file to the main folder of the Windows Installer project)<br />
<div align="left" dir="ltr" style="background-color: #f0f0f0; border-bottom: black 1px solid; border-left: black 1px solid; border-right: black 1px solid; border-top: black 1px solid;">cscript.exe "$(ProjectDir)run.js" "$(BuiltOuputPath)"</div><br />
In this way, you don't have to add any image file to your project, and it s embedded in the msi file (which u can edit any time).<br />
<br />
The run.js file:<br />
<div align="left" dir="ltr" style="background-color: #f0f0f0; border-bottom: black 1px solid; border-left: black 1px solid; border-right: black 1px solid; border-top: black 1px solid;"><span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="color: darkgreen; font-family: Consolas; font-size: 9.5pt;">// run.js <msi-file></span></span><span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="color: darkgreen; font-family: Consolas; font-size: 9.5pt;">// Performs a post-build fixup of an msi</span></span><br />
<br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">if</span><span style="font-family: Consolas; font-size: 9.5pt;"> (WScript.Arguments.Length != 1)</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;">{</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"><span style="mso-tab-count: 1;"> </span>WScript.StdErr.WriteLine(WScript.ScriptName + <span style="color: maroon;">" file"</span>);</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"><span style="mso-tab-count: 1;"> </span>WScript.Quit(1);</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;">}</span></span><br />
<br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">var</span><span style="font-family: Consolas; font-size: 9.5pt;"> filespec = WScript.Arguments(0);</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">var</span><span style="font-family: Consolas; font-size: 9.5pt;"> installer = WScript.CreateObject(<span style="color: maroon;">"WindowsInstaller.Installer"</span>);</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">var</span><span style="font-family: Consolas; font-size: 9.5pt;"> database = installer.OpenDatabase(filespec, 1<span style="color: darkgreen;">/*msiOpenDatabaseModeTransact*/</span>);</span></span><br />
<br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">var</span><span style="font-family: Consolas; font-size: 9.5pt;"> sql</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">var</span><span style="font-family: Consolas; font-size: 9.5pt;"> view</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">var</span><span style="font-family: Consolas; font-size: 9.5pt;"> record</span></span><br />
<br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">try</span><span style="font-family: Consolas; font-size: 9.5pt;"> {</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"><span style="mso-spacerun: yes;"><br />
</span> WScript.Echo(<span style="color: maroon;">"UPDATE default banner image"</span>);</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>sql = <span style="color: maroon;">"UPDATE `Binary` SET `Data` = ? WHERE `Name`= 'DefBannerBitmap'"</span>;</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>view = database.OpenView(sql)</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>record = installer.CreateRecord(1);</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>record.SetStream(1, <span style="color: maroon;">"C:\\installer_banner_img.jpg"</span>);</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> view.Execute(record);</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> view.Close();</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span> WScript.Echo(<span style="color: maroon;">"ADD splash image"</span>);</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>sql = <span style="color: maroon;">"INSERT INTO `Binary` (`Name`, `Data`) VALUES ('DefSplashBitmap', ?)"</span>;</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>view = database.OpenView(sql)</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>record = installer.CreateRecord(1);</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> record.SetStream(1, <span style="color: maroon;">"C:\\Installer_splash_img.jpg"</span>);</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> view.Execute(record);</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> view.Close();</span></span><br />
<br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> WScript.Echo(<span style="color: maroon;">"Update splash control"</span>);</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>sql = <span style="color: maroon;">"UPDATE `Control` SET `Text`='DefSplashBitmap' WHERE `Dialog_`='SplashForm' AND `Control`='SplashBmp'"</span>;</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>view = database.OpenView(sql)</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> view.Execute();</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> view.Close();</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span> database.Commit();</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;">}</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">catch</span><span style="font-family: Consolas; font-size: 9.5pt;"> (e) {</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>WScript.StdErr.Write(<span style="color: maroon;">"|||ERROR||| "</span>);</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> WScript.StdErr.WriteLine(e.Message);</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> WScript.Quit(1);</span></span><br />
<span class="MsoNormal" style="line-height: normal; margin-bottom: 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas; font-size: 9.5pt;">}</span></span></div><br />
Note:<br />
Before running this script, add a splash screen to the installer (using User-Interface view in Visual Studio)<br />
<br />
(*) this is also a good example how to <b>add/update binary(image) into your MSI using a sql script</b>.<br />
<br />
Best regard,<br />
<a href="http://mdb-blog.blogspot.com/">MDB-Blog</a></div>sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com0tag:blogger.com,1999:blog-9087075508981084919.post-82605551571140067422011-02-01T18:56:00.000+02:002011-02-01T18:56:13.628+02:00C# | Determine if Adobe (Macromedia) Flash player installed.All started when I needed to integrate an <b>Adobe (Macromedia) Flash object</b> in my C# WinForm application.<br />
I saw several posts about it, where <u>two</u> solutions where presents:<br />
1. Add WebBrowser Control and just nevigate to the "test.swf" file.<br />
2. Create COM object of ADOBE MACROMEDIA.<br />
<br />
I liked the 1st option more, because I don't need to handle COM objects (and to add another DLL to the app).<br />
Here is the code I used:<br />
<div dir="ltr" style="BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #f0f0f0" align="left">WebBrowser wb = new WebBrowser();<br />
//wb.Location = SOME LOCATION<br />
//wb.Size = SOME SIZE<br />
wb.AllowNavigation = false;<br />
wb.IsWebBrowserContextMenuEnabled = false;<br />
this.Controls.Add(wb); // this = FORM<br />
wb.Navigate(@"C:\test.swf");<br />
</div><br />
BUT, Then i noticed that when a pc <b>do NOT</b> have Adobe (Macromedia) Flash player <b>installed</b>, the webbrowser display a big red X.<br />
SO, before I use the FLASH image in my winform application, <u>I needed to check if FLASH player is INSTALLED or not!</u><br />
<br />
The idea is to check the registry for:<br />
<div dir="ltr" style="BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #f0f0f0" align="left">HKEY_LOCAL_MACHINE\SOFTWARE\Macromedia\FlashPlayer\CurrentVersion</div><br />
<b style="color: red;">And indeed it worked!</b><br />
Here is the full code for testing if FLASH installed (and also get the major Version):<br />
<div dir="ltr" style="BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #f0f0f0" align="left">internal static int? GetFlashPlayerVersion()<br />
{<br />
using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Macromedia\FlashPlayer"))<br />
{<br />
if (rk != null)<br />
{<br />
string version = rk.GetValue("CurrentVersion") as string;<br />
if (string.IsNullOrEmpty(version) == false)<br />
{<br />
int idx = version.IndexOf(",");<br />
if (idx > 0)<br />
{<br />
int value;<br />
if (int.TryParse(version.Substring(0, idx), out value) == true)<br />
{<br />
return value;<br />
}<br />
}<br />
}<br />
}<br />
}<br />
return null;<br />
}<br />
</div><br />
<b>And the code which using the method:</b><br />
<div dir="ltr" style="BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #f0f0f0" align="left">int? flashVersion = WindowsUtils.GetFlashPlayerVersion();<br />
if (flashVersion.HasValue == true && flashVersion > 6)<br />
{<br />
WebBrowser wb = new WebBrowser();<br />
wb.AllowNavigation = false;<br />
wb.IsWebBrowserContextMenuEnabled = false;<br />
this.Controls.Add(wb); // this = FORM<br />
wb.Navigate(@"C:\test.swf");<br />
}<br />
</div><br />
Best regards,<br />
<a href="http://mdb-blog.blogspot.com/">MDB-Blog</a>sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com1tag:blogger.com,1999:blog-9087075508981084919.post-72956185973877231012010-12-08T16:58:00.005+02:002010-12-19T11:44:17.541+02:00C# | Check if app is installed for “All users” or "Just me"<div dir="ltr" style="text-align: left;"><br />
<b>Today I bring a very HARD-to-find topic about getting an installed application <a href="http://msdn.microsoft.com/en-us/library/dd765197(v=VS.85).aspx">"Installation context"</a>.</b><br />
An installation context may be <u>Per-Machine Installation Context (ALLUSERS=1)</u> and <u>Per-User Installation Context (ALLUSERS="")</u>.<br />
<br />
When installing an application, the user may select one of two options:<i><br />
<b>a.</b> Install [APP] for yourself<br />
<b>b.</b> or for anyone who uses this computer</i><br />
[a] installs only for the <b>current user</b>(just me) while [b] installs for the <u>Local System user</u> which is for all-users(everyone).<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_a9m03IOahfE/TP-Wn8vi1zI/AAAAAAAAAYg/2pLlIGjLFUo/s1600/install.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="261" n4="true" src="http://2.bp.blogspot.com/_a9m03IOahfE/TP-Wn8vi1zI/AAAAAAAAAYg/2pLlIGjLFUo/s320/install.png" width="320" /></a></div><br />
In this post I will give a code for checking is an installed application <b>was</b> installed for "Everyone" or "Just me".<br />
<br />
The validation process is check if the APPLICATION-NAME exists in the registry keys under UserData.<br />
(*) <b>Everyone</b> - check under <span style='color: blue;'>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\<b>S-1-5-18</b>\Products\</span> (<b>S-1-5-18</b> represents the Local System user)<br />
<br />
(*) <b>Just me (Current user)</b> - check under <span style='color: blue;'>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\<b>S-?!?!?!?!</b>\Products\</span> (<b>S-?!?!?!?!</b> represents the Current user. this value found by the code: <span style='font-size:9.5pt;font-family:Consolas;color:#2B91AF'>WindowsIdentity</span><span style='font-size:9.5pt;font-family:Consolas'>.GetCurrent().User.Value<o:p></o:p></span>.<br />
<br />
<br />
[Code] Method's return type:<br />
<div align="left" dir="ltr" style="background-color: #f0f0f0; border-bottom: black 1px solid; border-left: black 1px solid; border-right: black 1px solid; border-top: black 1px solid;font-size:9.5pt;font-family:Consolas;"><span style='color:blue'>private</span> <span><span style='color:blue'>enum</span> <span style='color:#2B91AF'>InstallationContexts</span> { NotInstalled, Everyone, JustMe };</span><br />
</div><br />
[Code] Method declaration:<br />
<div align="left" dir="ltr" style="background-color: #f0f0f0; border-bottom: black 1px solid; border-left: black 1px solid; border-right: black 1px solid; border-top: black 1px solid;font-size:8pt;font-family:Consolas;"><span style=';color:blue'>private</span><span style=''> <span style='color:#2B91AF'>InstallationContexts</span> GetInstalledContext(<span style='color:blue'>string</span> p_appDisplayName)</span><br />
<span style=''>{</span><br />
<span style='
'><span style='mso-spacerun:yes'> </span><span
style='color:green'>//The S-1-5-18<span style='mso-spacerun:yes'> </span>=<br />
Local System user (Everyone) | HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\<br />
</span></span><br />
<span style='
'><span style='mso-spacerun:yes'> </span><span
style='color:green'>//The S-XXXXXX<span style='mso-spacerun:yes'> </span>=<br />
Current user (Just me)<span style='mso-spacerun:yes'> </span>|<br />
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-?!?!?!?!\Products\<br />
</span></span><br />
<span style='
'> </span><span style='
'><span style='mso-spacerun:yes'> </span><span
style='color:blue'>string</span> key;</span><br />
<span style='
'><span style='mso-spacerun:yes'> </span><span
style='color:blue'>string</span> keyFormat = <span style='color:#A31515'>@"SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\{0}\Products\"</span>;</span><br />
<span style='
'> </span><br />
<span style='
'><span style='mso-spacerun:yes'> </span><span
style='color:green'>// Check if installed for -> Everyone</span></span><br />
<span style='
'><span style='mso-spacerun:yes'> </span>key = <span
style='color:blue'>string</span>.Format(keyFormat, <span style='color:#A31515'>"S-1-5-18"</span>);</span><br />
<span style='
'><span style='mso-spacerun:yes'> </span><span
style='color:blue'>bool</span> res = GetInstalledContext_IsRegKeyExists(key, p_appDisplayName, <span style='color:#2B91AF'>StringComparison</span>.OrdinalIgnoreCase);</span><br />
<span style='
'><span style='mso-spacerun:yes'> </span><span
style='color:blue'>if</span> (res == <span style='color:blue'>true</span>)</span><br />
<span style='
'><span style='mso-spacerun:yes'> </span>{</span><br />
<span style='
'><span style='mso-spacerun:yes'> </span><span
style='color:blue'>return</span> <span style='color:#2B91AF'>InstallationContexts</span>.Everyone;</span><br />
<span style='
'><span style='mso-spacerun:yes'> </span>}</span><br />
<span style='
'> </span><br />
<span style='
'><span style='mso-spacerun:yes'> </span><span
style='color:green'>// Check if installed for -> Just me</span></span><br />
<span style='
'><span style='mso-spacerun:yes'> </span>key = <span
style='color:blue'>string</span>.Format(keyFormat, <span style='color:#2B91AF'>WindowsIdentity</span>.GetCurrent().User.Value);</span><br />
<span style='
'><span style='mso-spacerun:yes'> </span>res = GetInstalledContext_IsRegKeyExists(key, p_appDisplayName, <span
style='color:#2B91AF'>StringComparison</span>.OrdinalIgnoreCase);</span><br />
<span style='
'><span style='mso-spacerun:yes'> </span><span
style='color:blue'>if</span> (res == <span style='color:blue'>true</span>)</span><br />
<span style='
'><span style='mso-spacerun:yes'> </span>{</span><br />
<span style='
'><span style='mso-spacerun:yes'> </span><span
style='color:blue'>return</span> <span style='color:#2B91AF'>InstallationContexts</span>.JustMe;</span><br />
<span style='
'><span style='mso-spacerun:yes'> </span>}</span><br />
<span style='
'> </span><br />
<span style='
'><span style='mso-spacerun:yes'> </span><span
style='color:blue'>return</span> <span style='color:#2B91AF'>InstallationContexts</span>.NotInstalled;</span><br />
<span style='
'>}</span><br />
<span style='
;color:blue'>private</span><span style='
'> <span style='color:blue'>bool</span> GetInstalledContext_IsRegKeyExists(<span style='color:blue'>string</span> p_regKey, <span style='color:blue'>string</span> p_appDisplayName, <span
style='color:#2B91AF'>StringComparison</span> p_scompare)</span><br />
<span style='
'>{</span><br />
<span style='
'><span style='mso-spacerun:yes'> </span><span
style='color:blue'>using</span> (<span style='color:#2B91AF'>RegistryKey</span> regkey = <span style='color:#2B91AF'>Registry</span>.LocalMachine.OpenSubKey(p_regKey))</span><br />
<span style='
'><span style='mso-spacerun:yes'> </span>{</span><br />
<span style='
'><span style='mso-spacerun:yes'> </span><span
style='color:blue'>if</span> (regkey != <span style='color:blue'>null</span>)</span><br />
<span style='
'><span style='mso-spacerun:yes'> </span>{</span><br />
<span style='
'><span style='mso-spacerun:yes'> </span><span
style='color:#2B91AF'>RegistryKey</span> rk;</span><br />
<span style='
'><span style='mso-spacerun:yes'> </span><span
style='color:blue'>string</span>[] arrProducs = regkey.GetSubKeyNames();</span><br />
<span style='
'><span style='mso-spacerun:yes'> </span><span
style='color:blue'>for</span> (<span style='color:blue'>int</span> i = 0; i < arrProducs.Length; i++)</span> <span style=''><br />
<span style='mso-spacerun:yes'> </span>{</span><br />
<span style=''><span style='mso-spacerun:yes'> </span><span style='color:blue'>using</span> (rk = regkey.OpenSubKey(arrProducs[i] + <span style='color:#A31515'>@"\InstallProperties"</span>))</span><br />
<span style=''><span style='mso-spacerun:yes'> </span>{</span><br />
<span style=''><span style='mso-spacerun:yes'> </span> <span style='color:blue'> if</span> (rk != <span style='color:blue'>null</span> &&</span><br />
<span style=''><span style='mso-spacerun:yes'> </span><span
style='mso-pacerun:yes'> </span>p_appDisplayName.Equals(rk.GetValue(<span style='color:#A31515'>"DisplayName"</span>).ToString(), p_scompare) == <span style='color:blue'>true</span>)</span><br />
<span style=''><span style='mso-spacerun:yes'> </span>{</span><br />
<span style=''><span style='mso-spacerun:yes'> </span><span style='color:blue'>return</span> <span style='color:blue'>true</span>;</span><br />
<span style=''><span style='mso-spacerun:yes'> </span>}</span><br />
<span style=''><span style='mso-spacerun:yes'> </span>}</span><br />
<span style='
'><span style='mso-spacerun:yes'> </span>}</span><br />
<span style='
'><span style='mso-spacerun:yes'> </span>}</span><br />
<span style='
'><span style='mso-spacerun:yes'> </span>}</span><br />
<span style='
'> </span><br />
<span style='
'><span style='mso-spacerun:yes'> </span><span
style='color:blue'>return</span> <span style='color:blue'>false</span>;</span><br />
<span style='
'>}</span><br />
</div><br />
[Code] Method's usage example:<br />
<div align="left" dir="ltr" style="background-color: #f0f0f0; border-bottom: black 1px solid; border-left: black 1px solid; border-right: black 1px solid; border-top: black 1px solid;font-size:9.5pt;font-family:Consolas;"><span style='color:#2B91AF'>InstallationContexts </span><span> appContext = GetInstalledContext(<span style='color:#A31515'>"APP-DISPLAY-NAME"</span>);</span><br />
</div><br />
This code gives the ability to detect previously installed application or previously installed software is installed to ALLUSERS (everyone) or only to CURRENT USER (just me).<br />
<br />
<br />
<br />
<span style='color:#707070; font-size: 10px;'>Addition on 19.12.2010:</span><br />
(*) This checking operation is valid <u>ONLY</u> for an application and software which were installed using Microsoft's <a href="http://msdn.microsoft.com/en-us/library/cc185688%28VS.85%29.aspx">Windows Installer</a>.<br />
For general checking for installed application, check my post about <a href="http://mdb-blog.blogspot.com/2010/09/c-check-if-programapplication-is.html">check if program/application is installed</a>.<br />
<br />
<br />
Enjoy...<br />
<a href="http://mdb-blog.blogspot.com/">MDB-Blog</a></div>sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com7tag:blogger.com,1999:blog-9087075508981084919.post-91471971075849300742010-12-02T12:04:00.000+02:002010-12-02T12:04:42.452+02:00C# | check if program/application is installed on remote computerAs an advance to my previous post about <a href="http://mdb-blog.blogspot.com/2010/09/c-check-if-programapplication-is.html">checking if a program or an application is installed on my comptuer</a>, I bringing a code for doing this validation on <b>a remote computer</b>.<br />
<br />
The code is the same as checking for installed app in local comptuer (<a href="http://mdb-blog.blogspot.com/2010/09/c-check-if-programapplication-is.html">as described here</a>) except that checking remote machine registry.<br />
The remote machine registry checking is preformed using the static method <a href="http://msdn.microsoft.com/en-us/library/8zha3xws.aspx">OpenRemoteBaseKey</a> of the class <a href="http://msdn.microsoft.com/en-us/library/microsoft.win32.registrykey.aspx">RegistryKey</a>.<br />
<br />
The code:<br />
<div dir="ltr" style="BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #f0f0f0" align="left"><span style='font-size:9.5pt;font-family:Consolas; mso-fareast-font-family:"Times New Roman";color:blue'>public</span><span style='font-size:9.5pt;font-family:Consolas;mso-fareast-font-family:"Times New Roman"'> <span style='color:blue'>static</span> <span class=SpellE><span style='color:blue'>bool</span></span> <span class=SpellE>IsAppInstalled</span>(<span style='color:blue'>string</span> <span class=SpellE>p_machineName</span>, <span style='color:blue'>string</span> <span class=SpellE>p_name</span>)<u1:p></u1:p><br> {<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span>string</span> <span class=SpellE>keyName</span>;<u1:p></u1:p><br> <u1:p> </u1:p> <br> <span style='color:blue'><span style='mso-spacerun:yes'> </span></span><span style='color:green'>// search in: <span class=SpellE>CurrentUser<u1:p></u1:p></span></span><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span></span><span class=SpellE>keyName</span> = <span style='color:#A31515'>@"SOFTWARE\Microsoft\Windows\<span class=SpellE>CurrentVersion</span>\Uninstall"</span>;<br> <u1:p></u1:p><span style='color:blue'><span style='mso-spacerun:yes'> </span>if</span> (<span class=SpellE>ExistsInRemoteSubKey</span>(<span class=SpellE>p_machineName</span>, <span class=SpellE><span style='color:#2B91AF'>RegistryHive</span>.CurrentUser</span>, <span class=SpellE>keyName</span>, <span style='color:#A31515'>"<span class=SpellE>DisplayName</span>"</span>, <span class=SpellE>p_name</span>) == <span style='color:blue'>true</span>)<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span></span>{<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span>return</span> <span style='color:blue'>true</span>;<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span></span>}<u1:p></u1:p><br> <u1:p> </u1:p> <br> <span style='color:blue'><span style='mso-spacerun:yes'> </span></span><span style='color:green'>// search in: LocalMachine_32<u1:p></u1:p></span><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span></span><span class=SpellE>keyName</span> = <span style='color:#A31515'>@"SOFTWARE\Microsoft\Windows\<span class=SpellE>CurrentVersion</span>\Uninstall"</span>;<br> <u1:p></u1:p><span style='color:blue'><span style='mso-spacerun:yes'> </span>if</span> (<span class=SpellE>ExistsInRemoteSubKey</span>(<span class=SpellE>p_machineName</span>, <span class=SpellE><span style='color:#2B91AF'>RegistryHive</span>.LocalMachine</span>, <span class=SpellE>keyName</span>, <span style='color:#A31515'>"<span class=SpellE>DisplayName</span>"</span>, <span class=SpellE>p_name</span>) == <span style='color:blue'>true</span>)<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span></span>{<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span>return</span> <span style='color:blue'>true</span>;<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span></span>}<u1:p></u1:p><br> <u1:p> </u1:p> <br> <span style='color:blue'><span style='mso-spacerun:yes'> </span></span><span style='color:green'>// search in: LocalMachine_64<u1:p></u1:p></span><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span></span><span class=SpellE>keyName</span> = <span style='color:#A31515'>@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"</span>;<br> <u1:p></u1:p><span style='color:blue'><span style='mso-spacerun:yes'> </span>if</span> (<span class=SpellE>ExistsInRemoteSubKey</span>(<span class=SpellE>p_machineName</span>, <span class=SpellE><span style='color:#2B91AF'>RegistryHive</span>.LocalMachine</span>, <span class=SpellE>keyName</span>, <span style='color:#A31515'>"<span class=SpellE>DisplayName</span>"</span>, <span class=SpellE>p_name</span>) == <span style='color:blue'>true</span>)<br> <u1:p></u1:p><span style='color:blue'><span style='mso-spacerun:yes'> </span></span>{<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span>return</span> <span style='color:blue'>true</span>;<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span></span>}<u1:p></u1:p><br> <u1:p> </u1:p> <br> <span style='color:blue'><span style='mso-spacerun:yes'> </span>return</span> <span style='color:blue'>false</span>;<u1:p></u1:p><br> }<u1:p></u1:p><br> <span style='color:blue'>private</span> <span style='color:blue'>static</span> <span class=SpellE><span style='color:blue'>bool</span></span> <span class=SpellE>ExistsInRemoteSubKey</span>(<span style='color:blue'>string</span> <span class=SpellE>p_machineName</span>, <span class=SpellE><span style='color:#2B91AF'>RegistryHive</span></span> <span class=SpellE>p_hive</span>, <span style='color:blue'>string</span> <span class=SpellE>p_subKeyName</span>, <span style='color:blue'>string</span> <span class=SpellE>p_attributeName</span>, <span style='color:blue'>string</span> <span class=SpellE>p_name</span>)<u1:p></u1:p><br> {<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span></span><span class=SpellE><span style='color:#2B91AF'>RegistryKey</span></span> <span class=SpellE>subkey</span>;<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span>string</span> <span class=SpellE>displayName</span>;<u1:p></u1:p><br> <u1:p> </u1:p> <br> <span style='color:blue'><span style='mso-spacerun:yes'> </span>using</span> (<span class=SpellE><span style='color:#2B91AF'>RegistryKey</span></span> <span class=SpellE>regHive</span> = <span class=SpellE><span style='color:#2B91AF'>RegistryKey</span>.OpenRemoteBaseKey</span>(<span class=SpellE>p_hive</span>, <span class=SpellE>p_machineName</span>))<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span></span>{<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span>using</span> (<span class=SpellE><span style='color:#2B91AF'>RegistryKey</span></span> <span class=SpellE>regKey</span> = <span class=SpellE>regHive.OpenSubKey</span>(<span class=SpellE>p_subKeyName</span>))<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span></span>{<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span>if</span> (<span class=SpellE>regKey</span> != <span style='color:blue'>null</span>)<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span></span>{<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span class=SpellE>foreach</span></span> (<span style='color:blue'>string</span> <span class=SpellE>kn</span> <span style='color:blue'>in</span> <span class=SpellE>regKey.GetSubKeyNames</span>())<br> <u1:p></u1:p><span style='color:blue'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span></span>{<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span>using</span> (<span class=SpellE>subkey</span> = <span class=SpellE>regKey.OpenSubKey</span>(<span class=SpellE>kn</span>))<br> <u1:p></u1:p><span style='color:blue'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span></span>{<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span></span><span class=SpellE>displayName</span> = <span class=SpellE>subkey.GetValue</span>(<span class=SpellE>p_attributeName</span>) <span style='color:blue'>as</span> <span style='color:blue'>string</span>;<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span>if</span> (<span class=SpellE>p_name.Equals</span>(<span class=SpellE>displayName</span>, <span class=SpellE><span style='color:#2B91AF'>StringComparison</span>.OrdinalIgnoreCase</span>) == <span style='color:blue'>true</span>) <span style='color:green'>// key found!</span><br> <u1:p></u1:p><span style='color:blue'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span></span>{<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span class=GramE>return</span></span> <span style='color:blue'>true</span>;<br> <u1:p></u1:p><span style='color:blue'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span></span>}<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span></span>}<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span></span>}<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span></span>}<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span></span>}<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span></span>}<u1:p></u1:p><br> <span style='color:blue'><span style='mso-spacerun:yes'> </span>return</span> <span style='color:blue'>false</span>;<u1:p></u1:p><br> }<u1:p></u1:p><br> <span style='color:blue'><u1:p><span style='mso-spacerun:yes'> </span></span> </u1:p> <o:p></o:p></span></div><br />
How to use this code:<br />
<div dir="ltr" style="BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR:#f0f0f0;font-size:9.5pt;font-family:Consolas;" align="left"><span style='color:blue'>string</span><span style=''> MACHINE_NAME = <span style='color:#A31515'>"MY-PC-NAME"</span>;<br /><o:p></o:p></span> <span style='color:blue'>string</span><span style=''> APPLICATION_NAME = <span style='color:#A31515'>"APP-NAME"</span>;<br /><o:p></o:p></span> <span style='color:blue'>try</span><span style=''><br /><o:p></o:p></span> <span style=''>{<br /><o:p></o:p></span> <span style=''><span style='mso-spacerun:yes'> </span><span style='color:blue'>bool</span> isAppInstalled = IsAppInstalled(MACHINE_NAME, APPLICATION_NAME);<br /><o:p></o:p></span> <span style=''><o:p> </o:p></span> <span style=''><span style='mso-spacerun:yes'> </span><span style='color:blue'>string</span> msg = <span style='color:blue'>string</span>.Format(<span style='color:#A31515'>"Application '{0}' is {1} on the remote-machine '{2}'!"</span>,<br /><o:p></o:p></span> <span style=''><span style='mso-spacerun:yes'> </span>APPLICATION_NAME,<br /><o:p></o:p></span> <span style=''><span style='mso-spacerun:yes'> </span>isAppInstalled ? <span style='color:#A31515'>"installed"</span> : <span style='color:#A31515'>"NOT installed"</span>,<br /><o:p></o:p></span> <span style=''><span style='mso-spacerun:yes'> </span>MACHINE_NAME);<br /><o:p></o:p></span> <span style=''><span style='mso-spacerun:yes'> </span><span style='color:#2B91AF'>MessageBox</span>.Show(msg);<br /><o:p></o:p></span> <span style=''>}<br /><o:p></o:p></span> <span style='color:blue'>catch</span><span style=''> (<span style='color:#2B91AF'>Exception</span> ex)<br /><o:p></o:p></span> <span style=''>{<br /><o:p></o:p></span> <span style=''><span style='mso-spacerun:yes'> </span><span style='color:#2B91AF'>MessageBox</span>.Show(ex.Message);<br /><o:p></o:p></span> <span style=''>}<br /><o:p></o:p></span> <br />
</div><br />
<br />
Enjoy...<br />
<a href="http://mdb-blog.blogspot.com/">MDB-Blog</a>sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com3tag:blogger.com,1999:blog-9087075508981084919.post-87603543496073805682010-11-28T15:03:00.000+02:002010-11-28T15:03:58.291+02:00c# | Check if VcRedist installed (x86/x64/IA64)<div dir="ltr" style="text-align: left;">The following code checks if vcredist (<b>Microsoft Visual C++ 2008 SP1 Redistributable Package</b>) is installed.<br />
This check is used when we want to assure that the Visual C++ 2008 SP1 is INSTALLED perior to the application launch.<br />
<br />
The code is using the <a href="http://msdn.microsoft.com/en-us/library/aa370363.aspx">MsiQueryProductState</a> function from the <b>msi.dll</b>.<br />
<br />
We check the product codes of vcredist_x86, vcredist_x64 and vcredist_IA64 using MsiQueryProductState to validate if the product is installed or not!<br />
(vcredist product codes are listed <a href="http://mdb-blog.blogspot.com/2010/11/bootstrapper-package-detect-vcredist.html">HERE</a>)<br />
<br />
The Code:<br />
<div dir="ltr" style="BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #f0f0f0" align="left"><div style="font-size:9.5pt;font-family:Consolas"><span style=''><span style='color:blue'>public</span><span style=''> <span style='color:blue'>enum</span> <span style='color:#2B91AF'>INSTALLSTATE</span></span></span><br />
<span style=''><span style=''>{</span></span><br />
<span style=''><span style=''> INSTALLSTATE_NOTUSED = -7, <span style='color:green'>// component disabled</span></span></span><br />
<span style=''><span style=''> INSTALLSTATE_BADCONFIG = -6, <span style='color:green'>// configuration datacorrupt</span></span></span><br />
<span style=''><span style=''> INSTALLSTATE_INCOMPLETE = -5, <span style='color:green'>// installationsuspended or in progress</span></span></span><br />
<span style=''><span style=''> INSTALLSTATE_SOURCEABSENT = -4, <span style='color:green'>// run from source,source is unavailable</span></span></span><br />
<span style=''><span style=''> INSTALLSTATE_MOREDATA = -3, <span style='color:green'>// return bufferoverflow</span></span></span><br />
<span style=''><span style=''> INSTALLSTATE_INVALIDARG = -2, <span style='color:green'>// invalid functionargument</span></span></span><br />
<span style=''><span style=''> INSTALLSTATE_UNKNOWN = -1, <span style='color:green'>// unrecognized productor feature</span></span></span><br />
<span style=''><span style=''> INSTALLSTATE_BROKEN = 0, <span style='color:green'>// broken</span></span></span><br />
<span style=''><span style=''> INSTALLSTATE_ADVERTISED = 1, <span style='color:green'>// advertised feature</span></span></span><br />
<span style=''><span style=''> INSTALLSTATE_REMOVED = 1, <span style='color:green'>// component being removed(action state, not settable)</span></span></span><br />
<span style=''><span style=''> INSTALLSTATE_ABSENT = 2, <span style='color:green'>// uninstalled (or actionstate absent but clients remain)</span></span></span><br />
<span style=''><span style=''> INSTALLSTATE_LOCAL = 3, <span style='color:green'>// installed on local drive</span></span></span><br />
<span style=''><span style=''> INSTALLSTATE_SOURCE = 4, <span style='color:green'>// run from source, CD ornet</span></span></span><br />
<span style=''><span style=''> INSTALLSTATE_DEFAULT = 5, <span style='color:green'>// use default, local orsource</span></span></span><br />
<span style=''><span style=''>}</span></span><br />
<span style=''><span style=''> </span></span><br />
<span style=''><span style=''>[<span style='color:#2B91AF'>DllImport</span>(<span style='color:#A31515'>"msi.dll"</span>)]</span></span><br />
<span style=''><span style='color:blue'>private</span><span style=''> <span style='color:blue'>static</span> <span style='color:blue'>extern</span> <span style='color:#2B91AF'>INSTALLSTATE</span> MsiQueryProductState(<span style='color:blue'>string</span> product);</span></span><br />
<span style=''><span style='color:blue'> </span></span><br />
<span style=''><span style='color:blue'>public</span><span style=''> <span style='color:blue'>static</span> <span style='color:blue'>bool</span>IsVCRedistInstalled()</span></span><br />
<span style=''><span style=''>{</span></span><br />
<span style=''><span style=''> <span style='color:blue'>string</span>[] strCodes = <span style='color:blue'>new</span><span style='color:blue'>string</span>[]</span></span><br />
<span style=''><span style=''> {</span></span><br />
<span style=''><span style=''> <span style='color:green'>//vcredist_x86 - ProductCode</span></span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{9A25302D-30C0-39D9-BD6F-21E6EC160475}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{86CE1746-9EFF-3C9C-8755-81EA8903AC34}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{CA8A885F-E95B-3FC6-BB91-F4D9377C7686}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{820B6609-4C97-3A2B-B644-573B06A0F0CC}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{6AFCA4E1-9B78-3640-8F72-A7BF33448200}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{F03CB3EF-DC16-35CE-B3C1-C68EA09E5E97}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{402ED4A1-8F5B-387A-8688-997ABF58B8F2}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{887868A2-D6DE-3255-AA92-AA0B5A59B874}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{527BBE2F-1FED-3D8B-91CB-4DB0F838E69E}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{57660847-B1F7-35BD-9118-F62EB863A598}"</span>,</span></span><br />
<span style=''><span style=''> </span></span><br />
<span style=''><span style=''> <span style='color:green'>//vcredist_x64 - ProductCode</span></span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{8220EEFE-38CD-377E-8595-13398D740ACE}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{56F27690-F6EA-3356-980A-02BA379506EE}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{14297226-E0A0-3781-8911-E9D529552663}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{9B3F0A88-790D-3AD9-9F96-B19CF2746452}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{D285FC5F-3021-32E9-9C59-24CA325BDC5C}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{092EE08C-60DE-3FE6-B113-90076EC06D0D}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{A96702F7-EFC8-3EED-BE46-22C809D4EBE5}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{92B8FD1F-C1AE-3750-8577-631B0AA85DF5}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{2DFD8316-9EF1-3210-908C-4CB61961C1AC}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{E34002C7-8CE7-3F76-B36C-09FA973BC4F6}"</span>,</span></span><br />
<span style=''><span style=''> </span></span><br />
<span style=''><span style=''> <span style='color:green'>//vcredist_IA64 - ProductCode</span></span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{5827ECE1-AEB0-328E-B813-6FC68622C1F9}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{9363B366-8370-34F7-8164-25052EBF35FD}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{4EC84186-70BB-3121-9C1B-C63512D7126E}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{1F7B9797-A3C8-3B98-85C4-00620F221CE8}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{6BE0A7C7-3462-30EE-8B77-D21D7848D967}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{BF58DC07-38AB-3887-8000-70173F9650EA}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{D289009A-2728-3D0A-833E-F08E0E58934C}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{9476DC14-00C3-3C36-A435-00D714CF77B8}"</span>,</span></span><br />
<span style=''><span style=''> <span style='color:#A31515'>"{678835D7-D524-3C0E-9C33-1D3767FDA6BF}"</span></span></span><br />
<span style=''><span style=''> };</span></span><br />
<span style=''><span style=''> </span></span><br />
<span style=''><span style=''> <span style='color:#2B91AF'>INSTALLSTATE</span> state;</span></span><br />
<span style=''><span style=''> <span style='color:blue'>for</span> (<span style='color:blue'>int</span> i = 0;i < strCodes.Length; i++)</span></span><br />
<span style=''><span style=''> {</span></span><br />
<span style=''><span style=''> state = MsiQueryProductState(strCodes[i]);</span></span><br />
<span style=''><span style=''> <span style='color:blue'>if</span> (state == <span style='color:#2B91AF'>INSTALLSTATE</span>.INSTALLSTATE_LOCAL||</span></span><br />
<span style=''><span style=''> state == <span style='color:#2B91AF'>INSTALLSTATE</span>.INSTALLSTATE_DEFAULT)</span></span><br />
<span style=''><span style=''> {</span></span><br />
<span style=''><span style=''> <span style='color:blue'>return</span> <span style='color:blue'>true</span>;</span></span><br />
<span style=''><span style=''> }</span></span><br />
<span style=''><span style=''> }</span></span><br />
<span style=''><span style=''> </span></span><br />
<span style=''><span style=''> <span style='color:blue'>return</span> <span style='color:blue'>false</span>;</span></span><br />
<span style=''><span style=''>}</span></span></div></div><br />
You may also <b>extent and improve</b> this method to check only those Product Codes that matching current architecture (x86/x64/IA64).<br />
<br />
Hope it helps, <br />
<a href="http://mdb-blog.blogspot.com/">MDB-Blog</a><br />
</div>sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com2tag:blogger.com,1999:blog-9087075508981084919.post-71565295846708161752010-11-24T14:54:00.003+02:002010-11-25T10:26:07.238+02:00Bootstrapper Package | detect vcredist installed | Microsoft Visual C++ 2008 SP1 Redistributable PackageAs a countinue post of my previous <a href="http://mdb-blog.blogspot.com/2010/11/bootstrapper-package-visual-studio-2010.html">http://mdb-blog.blogspot.com/2010/11/bootstrapper-package-visual-studio-2010.html</a> about Bootstrapper Package ( Visual Studio 2010) of Microsoft .NET Framework Version 2.0 Redistributable, i give an example for:<br />
<b>Bootstrapper Package for Microsoft Visual C++ 2008 SP1 Redistributable Package</b><br />
(also known as Visual C++ 9.0 runtime redistributable package)<br />
<br />
As I searched for many sites, I couldn't find any <b>GOOD</b> article about detecting this resi package.<br />
So, I built a <u>bootstrapper package</u> using the information I found on Aaron's post: "How to detect the presence of the Visual C++ 9.0 runtime redistributable package" at <a href="http://blogs.msdn.com/b/astebner/archive/2009/01/29/9384143.aspx">http://blogs.msdn.com/b/astebner/archive/2009/01/29/9384143.aspx</a>.<br />
<br />
First of all, we have to detect if one of (vcredist_x86, vcredist_x64, vcredist_IA64) is INSTALLED! <br />
To do so, we will use the <a href="http://msdn2.microsoft.com/en-gb/library/aa370363.aspx">MsiQueryProductState API</a> inside our <b>Product.xml</b> in the bootstrapper package folder. (for more information about bootstrapper package files watch my <a href="http://mdb-blog.blogspot.com/2010/11/bootstrapper-package-visual-studio-2010.html">previous post</a>.<br />
Because there is a difference in the <b>Product-Code</b> between the <u>localized versions</u> of the redistributables for VC++ 2008, i checked and write down all the product codes in the following table:<br />
<br />
<div dir="ltr" style="BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #f0f0f0" align="left"><table border=1><tr style="color: firebrick; font-weight: bold;"><td>vcredist_x86.exe</td><td>ProductCode</td></tr>
<tr><td><b>English</b></td><td>{9A25302D-30C0-39D9-BD6F-21E6EC160475}</td></tr>
<tr><td><b>ChineseSimplified</b></td><td>{86CE1746-9EFF-3C9C-8755-81EA8903AC34}</td></tr>
<tr><td><b>ChineseTraditional</b></td><td>{CA8A885F-E95B-3FC6-BB91-F4D9377C7686}</td></tr>
<tr><td><b>French</b></td><td>{820B6609-4C97-3A2B-B644-573B06A0F0CC}</td></tr>
<tr><td><b>German</b></td><td>{6AFCA4E1-9B78-3640-8F72-A7BF33448200}</td></tr>
<tr><td><b>Italian</b></td><td>{F03CB3EF-DC16-35CE-B3C1-C68EA09E5E97}</td></tr>
<tr><td><b>Japanese</b></td><td>{402ED4A1-8F5B-387A-8688-997ABF58B8F2}</td></tr>
<tr><td><b>Korean</b></td><td>{887868A2-D6DE-3255-AA92-AA0B5A59B874}</td></tr>
<tr><td><b>Russian</b></td><td>{527BBE2F-1FED-3D8B-91CB-4DB0F838E69E}</td></tr>
<tr><td><b>Spanish</b></td><td>{57660847-B1F7-35BD-9118-F62EB863A598}</td></tr>
<tr><td colspan="2"></td></tr>
<tr><td colspan="2">UpgradeCode <u>for all</u> {AA783A14-A7A3-3D33-95F0-9A351D530011}</td></tr>
</table><br />
<table border=1><tr style="color: firebrick; font-weight: bold;"><td>vcredist_x64.exe</td><td>ProductCode</td></tr>
<tr><td><b>English</b></td><td>{8220EEFE-38CD-377E-8595-13398D740ACE}</td></tr>
<tr><td><b>ChineseSimplified</b></td><td>{56F27690-F6EA-3356-980A-02BA379506EE}</td></tr>
<tr><td><b>ChineseTraditional</b></td><td>{14297226-E0A0-3781-8911-E9D529552663}</td></tr>
<tr><td><b>French</b></td><td>{9B3F0A88-790D-3AD9-9F96-B19CF2746452}</td></tr>
<tr><td><b>German</b></td><td>{D285FC5F-3021-32E9-9C59-24CA325BDC5C}</td></tr>
<tr><td><b>Italian</b></td><td>{092EE08C-60DE-3FE6-B113-90076EC06D0D}</td></tr>
<tr><td><b>Japanese</b></td><td>{A96702F7-EFC8-3EED-BE46-22C809D4EBE5}</td></tr>
<tr><td><b>Korean</b></td><td>{92B8FD1F-C1AE-3750-8577-631B0AA85DF5}</td></tr>
<tr><td><b>Russian</b></td><td>{2DFD8316-9EF1-3210-908C-4CB61961C1AC}</td></tr>
<tr><td><b>Spanish</b></td><td>{E34002C7-8CE7-3F76-B36C-09FA973BC4F6}</td></tr>
<tr><td colspan="2"></td></tr>
<tr><td colspan="2">UpgradeCode <u>for all</u> {AA783A14-A7A3-3D33-95F0-9A351D530011}</td></tr>
</table><br />
<table border=1><tr style="color: firebrick; font-weight: bold;"><td>vcredist_IA64.exe</td><td>ProductCode</td></tr>
<tr><td><b>English</b></td><td>{5827ECE1-AEB0-328E-B813-6FC68622C1F9}</td></tr>
<tr><td><b>ChineseSimplified</b></td><td>{9363B366-8370-34F7-8164-25052EBF35FD}</td></tr>
<tr><td><b>ChineseTraditional</b></td><td>{4EC84186-70BB-3121-9C1B-C63512D7126E}</td></tr>
<tr><td><b>French</b></td><td>{1F7B9797-A3C8-3B98-85C4-00620F221CE8}</td></tr>
<tr><td><b>German</b></td><td>{6BE0A7C7-3462-30EE-8B77-D21D7848D967}</td></tr>
<tr><td><b>Italian</b></td><td>{BF58DC07-38AB-3887-8000-70173F9650EA}</td></tr>
<tr><td><b>Japanese</b></td><td>{D289009A-2728-3D0A-833E-F08E0E58934C}</td></tr>
<tr><td><b>Korean</b></td><td>{9476DC14-00C3-3C36-A435-00D714CF77B8}</td></tr>
<tr><td><b>Russian</b></td><td>[Installer NOT exists!]</td></tr>
<tr><td><b>Spanish</b></td><td>{678835D7-D524-3C0E-9C33-1D3767FDA6BF}</td></tr>
<tr><td colspan="2"></td></tr>
<tr><td colspan="2">UpgradeCode <u>for all</u> {AA783A14-A7A3-3D33-95F0-9A351D530011}</td></tr>
</table></div><br />
<br />
All left is to create the bootstrapper folder (name it <u>Vcredist2008sp1</u>):<br />
(*) en (FOLDER)<br />
(*) package.xml<br />
(*) Product.xml<br />
(*) redist.txt<br />
(*) vcredist_x86.exe (<a href="http://www.microsoft.com/downloads/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2">download here</a>)<br />
(*) vcredist_x64.exe (<a href="http://www.microsoft.com/downloads/details.aspx?familyid=BA9257CA-337F-4B40-8C14-157CFDFFEE4E">download here</a>)<br />
(*) vcredist_IA64.exe (<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=DCC211E6-AB82-41D6-8DEC-C79937393FE8">download here</a>)<br />
<br />
<br />
<b style="color: firebrick;">package.xml file:</b><br />
<div dir="ltr" style="BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #f0f0f0" align="left"><?xml version="1.0" encoding="utf-8"?><br />
<Package Name="DisplayName" Culture="Culture" xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"><br />
<Strings><br />
<String Name="Culture">en</String><br />
<String Name="DisplayName">Microsoft Visual C++ 2008 SP1 Redistributable Package</String><br />
<String Name="AdminRequired">Administrator permissions are required to install the Microsoft Visual C++ 2008 SP1 Redistributable Package Contact your administrator.</String><br />
<String Name="CancelledInstall">The user has cancelled the installation. The Microsoft Visual C++ 2008 SP1 Redistributable Package has not been installed.</String><br />
<String Name="GeneralFailure">A failure occurred attempting to install the Microsoft Visual C++ 2008 SP1 Redistributable Package.</String><br />
<String Name="ErrorDownloading">A failure occurred while downloading Microsoft Visual C++ 2008 SP1 Redistributable Package.</String><br />
</Strings><br />
</Package><br />
</div><br />
<b style="color: firebrick;">Product.xml file:</b><br />
1. PackageFiles (installation files):<br />
<div dir="ltr" style="BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #f0f0f0" align="left"><PackageFiles CopyAllPackageFiles="false"><br />
<PackageFile Name="vcredist_x86.exe" /><br />
<PackageFile Name="vcredist_x64.exe" /><br />
<PackageFile Name="vcredist_IA64.exe" /><br />
</PackageFiles></div><br />
2. InstallChecks (valiadation prefurmed):<br />
<div dir="ltr" style="BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #f0f0f0" align="left"><InstallChecks><br />
<!--VCRedistx86 - ProductCodes--><br />
<MsiProductCheck Property="VCRedistx86_English_Installed" Product="{9A25302D-30C0-39D9-BD6F-21E6EC160475}" /><br />
<MsiProductCheck Property="VCRedistx86_ChineseSimplified_Installed" Product="{86CE1746-9EFF-3C9C-8755-81EA8903AC34}" /><br />
<MsiProductCheck Property="VCRedistx86_ChineseTraditional_Installed" Product="{CA8A885F-E95B-3FC6-BB91-F4D9377C7686}" /><br />
<MsiProductCheck Property="VCRedistx86_French_Installed" Product="{820B6609-4C97-3A2B-B644-573B06A0F0CC}" /><br />
<MsiProductCheck Property="VCRedistx86_German_Installed" Product="{6AFCA4E1-9B78-3640-8F72-A7BF33448200}" /><br />
<MsiProductCheck Property="VCRedistx86_Italian_Installed" Product="{F03CB3EF-DC16-35CE-B3C1-C68EA09E5E97}" /><br />
<MsiProductCheck Property="VCRedistx86_Japanese_Installed" Product="{402ED4A1-8F5B-387A-8688-997ABF58B8F2}" /><br />
<MsiProductCheck Property="VCRedistx86_Korean_Installed" Product="{887868A2-D6DE-3255-AA92-AA0B5A59B874}" /><br />
<MsiProductCheck Property="VCRedistx86_Russian_Installed" Product="{527BBE2F-1FED-3D8B-91CB-4DB0F838E69E}" /><br />
<MsiProductCheck Property="VCRedistx86_Spanish_Installed" Product="{57660847-B1F7-35BD-9118-F62EB863A598}" /><br />
<br />
<!--VCRedistx64 - ProductCodes--><br />
<MsiProductCheck Property="VCRedistx64_English_Installed" Product="{8220EEFE-38CD-377E-8595-13398D740ACE}" /><br />
<MsiProductCheck Property="VCRedistx64_ChineseSimplified_Installed" Product="{56F27690-F6EA-3356-980A-02BA379506EE}" /><br />
<MsiProductCheck Property="VCRedistx64_ChineseTraditional_Installed" Product="{14297226-E0A0-3781-8911-E9D529552663}" /><br />
<MsiProductCheck Property="VCRedistx64_French_Installed" Product="{9B3F0A88-790D-3AD9-9F96-B19CF2746452}" /><br />
<MsiProductCheck Property="VCRedistx64_German_Installed" Product="{D285FC5F-3021-32E9-9C59-24CA325BDC5C}" /><br />
<MsiProductCheck Property="VCRedistx64_Italian_Installed" Product="{092EE08C-60DE-3FE6-B113-90076EC06D0D}" /><br />
<MsiProductCheck Property="VCRedistx64_Japanese_Installed" Product="{A96702F7-EFC8-3EED-BE46-22C809D4EBE5}" /><br />
<MsiProductCheck Property="VCRedistx64_Korean_Installed" Product="{92B8FD1F-C1AE-3750-8577-631B0AA85DF5}" /><br />
<MsiProductCheck Property="VCRedistx64_Russian_Installed" Product="{2DFD8316-9EF1-3210-908C-4CB61961C1AC}" /><br />
<MsiProductCheck Property="VCRedistx64_Spanish_Installed" Product="{E34002C7-8CE7-3F76-B36C-09FA973BC4F6}" /><br />
<br />
<!--VCRedistIA64 - ProductCodes--><br />
<MsiProductCheck Property="VCRedistIA64_English_Installed" Product="{5827ECE1-AEB0-328E-B813-6FC68622C1F9}" /><br />
<MsiProductCheck Property="VCRedistIA64_ChineseSimplified_Installed" Product="{9363B366-8370-34F7-8164-25052EBF35FD}" /><br />
<MsiProductCheck Property="VCRedistIA64_ChineseTraditional_Installed" Product="{4EC84186-70BB-3121-9C1B-C63512D7126E}" /><br />
<MsiProductCheck Property="VCRedistIA64_French_Installed" Product="{1F7B9797-A3C8-3B98-85C4-00620F221CE8}" /><br />
<MsiProductCheck Property="VCRedistIA64_German_Installed" Product="{6BE0A7C7-3462-30EE-8B77-D21D7848D967}" /><br />
<MsiProductCheck Property="VCRedistIA64_Italian_Installed" Product="{BF58DC07-38AB-3887-8000-70173F9650EA}" /><br />
<MsiProductCheck Property="VCRedistIA64_Japanese_Installed" Product="{D289009A-2728-3D0A-833E-F08E0E58934C}" /><br />
<MsiProductCheck Property="VCRedistIA64_Korean_Installed" Product="{9476DC14-00C3-3C36-A435-00D714CF77B8}" /><br />
<!--RUSSIAN installer not exists --><br />
<MsiProductCheck Property="VCRedistIA64_Spanish_Installed" Product="{678835D7-D524-3C0E-9C33-1D3767FDA6BF}" /><br />
</InstallChecks></div><br />
3. for each installation check if any localized installed:<br />
<div dir="ltr" style="BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: #f0f0f0" align="left"><BypassIf Property="VCRedistx86_English_Installed" Compare="ValueEqualTo" Value="5" /><br />
<BypassIf Property="VCRedistx86_ChineseSimplified_Installed" Compare="ValueEqualTo" Value="5" /><br />
<BypassIf Property="VCRedistx86_ChineseTraditional_Installed" Compare="ValueEqualTo" Value="5" /><br />
<BypassIf Property="VCRedistx86_French_Installed" Compare="ValueEqualTo" Value="5" /><br />
<BypassIf Property="VCRedistx86_German_Installed" Compare="ValueEqualTo" Value="5" /><br />
<BypassIf Property="VCRedistx86_Italian_Installed" Compare="ValueEqualTo" Value="5" /><br />
<BypassIf Property="VCRedistx86_Japanese_Installed" Compare="ValueEqualTo" Value="5" /><br />
<BypassIf Property="VCRedistx86_Korean_Installed" Compare="ValueEqualTo" Value="5" /><br />
<BypassIf Property="VCRedistx86_Russian_Installed" Compare="ValueEqualTo" Value="5" /><br />
<BypassIf Property="VCRedistx86_Spanish_Installed" Compare="ValueEqualTo" Value="5" /></div><br />
Download link for the full bootstrapper package is here:<br />
<a href="http://cid-539d62829af123fb.office.live.com/self.aspx/.Public/Bootstrapper%20Package/Vcredist2008sp1%5E_bootstrapper.zip">download full package here</a><br />
<br />
Hope it helps,<br />
<a href="http://mdb-blog.blogspot.com/">MDB-Blog</a>sami.ehttp://www.blogger.com/profile/17924298382466536337noreply@blogger.com5