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

<channel>
	<title>El cajón desastre &#187; .NET</title>
	<atom:link href="http://www.dubasdey.com/category/programacion/dotnet/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dubasdey.com</link>
	<description></description>
	<lastBuildDate>Tue, 02 Jun 2009 14:25:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Ocultar columnas de un GridView</title>
		<link>http://www.dubasdey.com/2007/08/27/ocultar-columnas-de-un-gridview/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=ocultar-columnas-de-un-gridview</link>
		<comments>http://www.dubasdey.com/2007/08/27/ocultar-columnas-de-un-gridview/#comments</comments>
		<pubDate>Mon, 27 Aug 2007 14:28:33 +0000</pubDate>
		<dc:creator>Kuroneko</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.dubasdey.com/2007/08/27/ocultar-columnas-de-un-gridview/</guid>
		<description><![CDATA[Despues de ver esta entrada (http://id4.es/blogs/indigo/archive/2007/08/09/ocultar-columnas-de-un-gridview.aspx)  sobre como ocultar columnas de un GridView si que desaparezcan los datos. He estado realizando unas pruebas
y la solucion es mas simple de la que se plantea.
Normalmente nosotros hacemos en ASPNET:

// Creamos las columnas que sea.. bla bla bla .. el dise&#241;o bla bla
grid.Columns[0].Visible = false;
// Vinculamos los [...]]]></description>
			<content:encoded><![CDATA[<p>Despues de ver esta entrada (<a href="http://id4.es/blogs/indigo/archive/2007/08/09/ocultar-columnas-de-un-gridview.aspx">http://id4.es/blogs/indigo/archive/2007/08/09/ocultar-columnas-de-un-gridview.aspx</a>)  sobre como ocultar columnas de un GridView si que desaparezcan los datos. He estado realizando unas pruebas<br />
y la solucion es mas simple de la que se plantea.</p>
<p>Normalmente nosotros hacemos en ASPNET:<br />
<code><br />
// Creamos las columnas que sea.. bla bla bla .. el dise&ntilde;o bla bla</p>
<p>grid.Columns[0].Visible = false;</p>
<p>// Vinculamos los datos<br />
grid.DataSource = dtt;<br />
grid.DataBind();<br />
</code></p>
<p>Con esto el DataBind no cargara los datos para las columnas que sean <code>Visible=False</code></p>
<p>Lo mas sencillo para resolver este problema es simplemente, cargar todo el GridView y una vez que tenemos los datos, especificar cuales no queremos mostrar</p>
<p><code><br />
// Creamos las columnas que sea.. bla bla bla .. el dise&ntilde;o bla bla</p>
<p>grid.DataSource = dtt;<br />
grid.DataBind();<br />
grid.Columns[0].Visible = false;<br />
</code></p>
<p>Simplemente cambiando el orden del DataBind() con respecto a la asignacion de las columnas no visibles hacemos que estas sean no visibles con sus datos.</p>
<p>Que aprobeche!! <img src='http://www.dubasdey.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.dubasdey.com/2007/08/27/ocultar-columnas-de-un-gridview/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>ASP.NET y la navegaci&#243;n entre p&#225;ginas</title>
		<link>http://www.dubasdey.com/2007/06/18/aspnet-y-la-navegacin-entre-pginas/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=aspnet-y-la-navegacin-entre-pginas</link>
		<comments>http://www.dubasdey.com/2007/06/18/aspnet-y-la-navegacin-entre-pginas/#comments</comments>
		<pubDate>Mon, 18 Jun 2007 13:33:31 +0000</pubDate>
		<dc:creator>Manuel Cernuda</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.dubasdey.com/2007/06/18/aspnet-y-la-navegacin-entre-pginas/</guid>
		<description><![CDATA[
Cuando trabajamos con ASP.NET lo mas normal es que nuestra aplicaci&#243;n este dividida en mas de un WebForm.
Esto conlleva que en m&#225;s de una ocasi&#243;n necesitaremos ir de una p&#225;gina a otra, y para realizar esa &#34;navegaci&#243;n&#34;, tenemos opciones claramente diferenciadas:
Server.Transfer(): +1 Sobrecargas

Finaliza la ejecuci&#243;n de la p&#225;gina actual y comienza la ejecuci&#243;n de una [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.dubasdey.com/wp-content/uploads/2007/04/asplogo.gif' alt='ASP' /></p>
<p>Cuando trabajamos con <a href="http://es.wikipedia.org/wiki/ASP.NET" target="_blank" title="ASP.NET">ASP.NET</a> lo mas normal es que nuestra aplicaci&oacute;n este dividida en mas de un WebForm.<br />
Esto conlleva que en m&aacute;s de una ocasi&oacute;n necesitaremos ir de una p&aacute;gina a otra, y para realizar esa &quot;navegaci&oacute;n&quot;, tenemos opciones claramente diferenciadas:</p>
<p><code>Server.Transfer():</code> +1 Sobrecargas<br />
<br />
Finaliza la ejecuci&oacute;n de la p&aacute;gina actual y comienza la ejecuci&oacute;n de una nueva p&aacute;gina para la solicitud actual.<br />
<br />
<code>Response.Redirect():</code> +1 Sobrecargas<br />
<br />
Redirecciona un cliente a una nueva direcci&oacute;n <abbr lang="en" title="Uniform Resource Locator">URL</abbr>. Especifica la nueva <abbr lang="en" title="Uniform Resource Locator">URL</abbr> y si la ejecuci&oacute;n de la p&aacute;gina actual debe finalizar.<br />
<br />
<code>Server.Execute():</code> +1 Sobrecargas<br />
<br />
Ejecuta la solicitud actual utilizando otra p&aacute;gina ubicada en la ruta de acceso a la direcci&oacute;n <abbr lang="en" title="Uniform Resource Locator">URL</abbr> especificada.<br />
<br />
Los comportamientos de estas tres opciones pueden parecer similares a priori, pero si nos sumergimos un poco m&aacute;s en su funcionamiento veremos en que contexto debe usarse cada una.</p>
<p></p>
<h4>Server.Transfer()</h4>
<p>
Al ejecutar este m&eacute;todo se abandonar&aacute; la p&aacute;gina actual y se navegar&aacute; a la introducida en el par&aacute;metro. Al realizarse esta operaci&oacute;n, no se mostrar&aacute; la <abbr lang="en" title="Uniform Resource Locator">URL</abbr> de la nueva pagina, si no que se mantendr&aacute; la actual. Lo que &quot;ocultara&quot; de cara al usuario la ubicaci&oacute;n de la p&aacute;gina en la que se encuentra. </p>
<p>Su caracter&iacute;stica mas destacada, es que si utilizamos su sobrecarga podemos decirle si va a mandar el conjunto de controles que tenemos en la principal.</p>
<p>
<code><br />
Server.Transfer(&quot;pagina2.aspx&quot;,true)<br />
</code><br />
<br />
Si por ejemplo ten&iacute;amos un formulario con un <code>TextBox</code> en la p&aacute;gina principal, ahora podemos acceder al texto que conten&iacute;a cuando se hizo la navegaci&oacute;n. Para ello utilizaremos el nombre o el &iacute;ndice del control (hay que tener en cuenta, que si el control no existe, al intentar obtenerlo devolver&aacute; una excepci&oacute;n.):<br />
<br />\r\n<br />
<br />
<code><br />
string cadena = Request.Form[&quot;NombreControl&quot;];<br />
</code><br />
<br />
<code><br />
string cadena = Request.Form[indice];<br />
</code><br />
<br />
Otra de las peculiaridades de este m&eacute;todo, es que como la redirecci&oacute;n conlleva enviar objetos de servidor, no permite redirigir a <abbr lang="en" title="Uniform Resource Locator">URL</abbr>\&#8217;s ajenas a la aplicaci&oacute;n (como a <a href="http://www.google.es" target="_blank" title="Google">Google</a> o suced&aacute;neos) ni a <abbr lang="en" title="Uniform Resource Locator">URL</abbr>&#8217;s de <abbr lang="en" title="Hyper Text Markup Language">HTML</abbr> plano incluso si est&aacute;n incluidas dentro de la aplicaci&oacute;n. Por tanto si fuera necesario, deber&iacute;amos crear un WebForm.aspx est&aacute;ndar e incluir dentro el <abbr lang="en" title="Hyper Text Markup Language">HTML</abbr> que necesitemos. </p>
<h4>Response.Redirect()</h4>
<p>
Al ejecutar este m&eacute;todo se abandonar&aacute; la p&aacute;gina actual y se navegar&aacute; a la p&aacute;gina introducida por par&aacute;metro, permitiendo adem&aacute;s la posibilidad de que se mantenga la ejecuci&oacute;n de esa p&aacute;gina.</p>
<p>Es decir, ante dos botones con un c&oacute;digo como este:</p>
<p><code><br />
private void btnRedirigir_Click(object sender, System.EventArgs e) {<br />
     Response.Redirect("prueba.aspx",false);<br />
     Session["nombre"] == "Texto";<br />
}</p>
<p>private void btnRedirigir2_Click(object sender, System.EventArgs e){<br />
     Response.Redirect("prueba.aspx");<br />
     Session["nombre"] == "Texto";<br />
}<br />
</code></p>
<p>Al llegar al <code>Page_Load</code> de la p&aacute;gina prueba.aspx, veremos que si hab&iacute;amos pulsado el primer bot&oacute;n, tendremos almacenado en <code>Session[&quot;nombre&quot;]</code> la cadena <code>&quot;Texto&quot;</code>, mientras que si se utiliz&oacute; el segundo bot&oacute;n ese objeto de sesi&oacute;n no existe.</p>
<p>Adem&aacute;s de esto, se puede utilizar la redirecci&oacute;n utilizando las variables por <abbr lang="en" title="Uniform Resource Locator">URL</abbr> (como las <code>$_GET</code> de <abbr lang="en" title="PHP: Hypertext Preprocessor">PHP</abbr>). Es tan simple como crear la <code>string</code> con esas variables ya incluidas.</p>
<p><code><br />
string querystring = "prueba.aspx?p=" + variable1.ToString() + "&#038;q=" + variable2.ToString();<br />
Response.Redirect(querystring);<br />
</code><br />
<br />
Estas se almacenan en la <code>Request</code> y se puede acceder a ellas f&aacute;cilmente: </p>
<p><code><br />
int valor1 = Convert.toInt32(Request.Params["p"]);<br />
int valor2 = Convert.toInt32(Request.Params["q"]);<br />
</code></p>
<p>Al igual que cuando se almacenan objetos en sesi&oacute;n, hay que realizar un casting ya que todo se guarda como <code>object</code>.</p>
<p>Al contrario que el <code>Server.Transfer</code>, este m&eacute;todo si permite redirigir a una p&aacute;gina externa (como un hiperv&iacute;nculo) y si que se ve la <abbr lang="en" title="Uniform Resource Locator">URL</abbr> de la p&aacute;gina al cargarse.        </p>
<h4>Server.Execute()</h4>
<p>
Esta es la opci&oacute;n menos recomendada, ya que no redirige f&iacute;sicamente, si no que ejecuta el c&oacute;digo de la segunda pagina dentro de la primera. Su uso m&aacute;s habitual se basa en insertar un control de tipo <code>Literal</code> en la p&aacute;gina principal, y ejecutar una segunda p&aacute;gina a trav&eacute;s de un <code>StringWriter</code> (que requiere un a&ntilde;adir un <code>using</code> del namespace <code>System.IO</code>), y que el resultado se almacene en el <code>Literal</code>. Por ejemplo:</p>
<p>StringWriter sw = new StringWriter();<br />
Server.Execute(&#8220;prueba.aspx&#8221;,sw);<br />
this.Literal1.Text = sw.ToString();     </p>
<p>
Si en prueba.aspx almacenamos el c&oacute;digo de un <code>Input TextBox</code> y un <code>Input Button</code> dentro de un <code>Panel</code>, al ejecutar ese m&eacute;todo obtendremos ese mismo conjunto de controles sin tener que ir f&iacute;sicamente a la p&aacute;gina.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dubasdey.com/2007/06/18/aspnet-y-la-navegacin-entre-pginas/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Expresiones Regulares</title>
		<link>http://www.dubasdey.com/2007/05/21/expresiones-regulares/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=expresiones-regulares</link>
		<comments>http://www.dubasdey.com/2007/05/21/expresiones-regulares/#comments</comments>
		<pubDate>Mon, 21 May 2007 11:58:48 +0000</pubDate>
		<dc:creator>Manuel Cernuda</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.dubasdey.com/2007/05/21/expresiones-regulares/</guid>
		<description><![CDATA[
Las Expresiones Regulares son patrones que describen conjuntos de cadenas de caracteres sin enumerar sus elementos. Es una herramienta muy &#250;til y es soportada por casi todos los lenguajes de programaci&#243;n, y sistemas operativos. 
&#191;Cuando usar una Expresi&#243;n Regular? Por ejemplo si necesit&#225;is saber si una cadena de caracteres cumple un patr&#243;n determinado: Un tel&#233;fono [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.dubasdey.com/wp-content/uploads/2007/04/logoregex.gif' alt='RegEX' /></p>
<p>Las <a href="http://es.wikipedia.org/wiki/Expresiones_regulares" target="_blank" title="Expresiones Regulares en la Wikipedia">Expresiones Regulares</a> son patrones que describen conjuntos de cadenas de caracteres sin enumerar sus elementos. Es una herramienta muy &uacute;til y es soportada por casi todos los lenguajes de programaci&oacute;n, y sistemas operativos. </p>
<p>&iquest;Cuando usar una <a href="http://es.wikipedia.org/wiki/Expresiones_regulares" target="_blank" title="Expresiones Regulares en la Wikipedia">Expresi&oacute;n Regular</a>? Por ejemplo si necesit&aacute;is saber si una cadena de caracteres cumple un patr&oacute;n determinado: Un tel&eacute;fono son n&uacute;meros separados por guiones, pero no puede tener otro tipo de caracteres. Veamos un ejemplo:</p>
<p>&nbsp;&nbsp;&nbsp;<strong>Cadena</strong>: 985-21-21-21<br />
<br />
&nbsp;&nbsp;&nbsp;<strong>Patron</strong>: (\d{2,3}-\d{2}-\d{2}-\d{2})</p>
<p>Si desglosamos la expresi&oacute;n regular, vemos el metacar&aacute;cter \d. Esto significa en lenguaje natural <em>&quot;un car&aacute;cter que sea D&iacute;gito Decimal&quot;</em>. Justo a continuaci&oacute;n se le indica que debe tener un m&aacute;ximo de tres repeticiones y un m&iacute;nimo de dos. </p>
<p>Tambi&eacute;n puede darse el caso que no se sepa, o no se quiera limitar el n&uacute;mero de repeticiones. Para eso est&aacute;n los operadores: + (una, ninguna o infinitas repeticiones), * (al menos una, o infinitas) y ? (ninguna o una pero no mas).</p>
<p>Otros metacaracteres son (hay muchos mas):</p>
<p>&nbsp;&nbsp;&nbsp;\t &#8211; Representa un tabulador.<br />
<br />
&nbsp;&nbsp;&nbsp;\n &#8211; Representa la &quot;nueva l&iacute;nea&quot;.<br />
<br />
&nbsp;&nbsp;&nbsp;\e &#8211; Representa la tecla &quot;Esc&quot; o &quot;Escape&quot; .<br />
<br />
&nbsp;&nbsp;&nbsp;\f &#8211; Representa un salto de p&aacute;gina .<br />
<br />
&nbsp;&nbsp;&nbsp;\v &#8211; Representa un tabulador vertical.<br />
<br />
&nbsp;&nbsp;&nbsp;\d &#8211; Representa un d&iacute;gito del 0 al 9.<br />
<br />
&nbsp;&nbsp;&nbsp;\w &#8211; Representa cualquier car&aacute;cter alfanum&eacute;rico.<br />
<br />
&nbsp;&nbsp;&nbsp;\s &#8211; Representa un espacio en blanco.<br />
<br />
&nbsp;&nbsp;&nbsp;\D &#8211; Representa cualquier car&aacute;cter que no sea un d&iacute;gito del 0 al 9.<br />
<br />
&nbsp;&nbsp;&nbsp;\W &#8211; Representa cualquier car&aacute;cter no alfanum&eacute;rico.<br />
<br />
&nbsp;&nbsp;&nbsp;\S &#8211; Representa cualquier car&aacute;cter que no sea un espacio en blanco.<br />
<br />
&nbsp;&nbsp;&nbsp;\A &#8211; Representa el inicio de la cadena. No un car&aacute;cter sino una posici&oacute;n.<br />
<br />
&nbsp;&nbsp;&nbsp;\ &#8211; Representa el final de la cadena. No un car&aacute;cter sino una posici&oacute;n.</p>
<p>Con estos metacaracteres y los operadores, puede conseguirse cualquier patr&oacute;n, y siempre nos queda la posibilidad de usar el metac&aacute;rater &quot;.&quot; que significa &quot;cualquier car&aacute;cter&quot;.</p>
<p>Otros operadores interesantes son el | (disyunci&oacute;n), ^ (negaci&oacute;n o inicio de cadena dependiendo de su uso), $ (fin de cadena).</p>
<p>Vamos a hacer un ejemplo completo. Si tenemos que validar si una cadena podr&iacute;a ser una matr&iacute;cula de coche valida, tendr&iacute;a que validar las antiguas y las nuevas.</p>
<p>&nbsp;&nbsp;&nbsp;<strong>Matr&iacute;cula Nueva:</strong> 0123-ABC<br />
<br />	<br />
&nbsp;&nbsp;&nbsp;<strong>Patr&oacute;n:</strong> (\d{4}-[\D\w]{3})</p>
<p>&nbsp;&nbsp;&nbsp;<strong>Matr&iacute;cula Vieja:</strong> AB-0123-CS<br />
<br />
&nbsp;&nbsp;&nbsp;<strong>Patr&oacute;n:</strong>		  ([\D\w]{1,2}-\d{4}-[\D\w]{2})</p>
<p>Ahora la uni&oacute;n de ambas nos dar&aacute; el patr&oacute;n final<br />
<br />
&nbsp;&nbsp;&nbsp;(\d{4}-[\D\w]{3}|[\D\w]{1,2}-\d{4}-[\D\\w]{2})</p>
<p>Para utilizar <a href="http://es.wikipedia.org/wiki/Expresiones_regulares" target="_blank" title="Expresiones Regulares en la Wikipedia">Expresiones Regulares</a> desde <abbr lang="en" title="PHP: Hypertext Preprocessor">PHP</abbr>, utilizaremos las funciones
<pre name="code" class="php:nocontrols">ereg(expresion,cadena)</pre>
<p> que devuelve <code>bool</code> y </p>
<pre name="code" class="php:nocontrols">ereg_replace(expresi&oacute;n, sustituci&oacute;n, cadena)</pre>
<p> que sustituye las coincidencias por el valor de sustituci&oacute;n. </p>
<p>Desde <a href="http://es.wikipedia.org/wiki/C_sharp" target="_blank" title="CSharp">C#</a> solo ten&eacute;is que hacer un
<pre name="code" class="c#:nocontrols">using System.Text.RegularExpressions</pre>
<p>y luego declarar un objeto.</p>
<pre name="code" class="c#:nocontrols">
Regex regex = new Regex("^(\\d)$");
bool resultado = regex.IsMatch(cadena);
</pre>
<p><code>IsMatch</code> devuelve verdadero o falso si la cadena cumple o no la expresion regular con la que se construyo <code>regex</code>. </p>
<p>En un pr&oacute;ximo art&iacute;culo os mostrare un ejemplo pr&aacute;ctico de como utilizar estas funciones de <a href="http://es.wikipedia.org/wiki/Expresiones_regulares" target="_blank" title="Expresiones Regulares en la Wikipedia">Expresiones Regulares</a> con <abbr lang="en" title="PHP: Hypertext Preprocessor">PHP</abbr>. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.dubasdey.com/2007/05/21/expresiones-regulares/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ServiceManager beta</title>
		<link>http://www.dubasdey.com/2007/04/19/servicemanager-beta/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=servicemanager-beta</link>
		<comments>http://www.dubasdey.com/2007/04/19/servicemanager-beta/#comments</comments>
		<pubDate>Thu, 19 Apr 2007 11:48:36 +0000</pubDate>
		<dc:creator>Manuel Cernuda</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Bases de datos]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://www.dubasdey.com/2007/04/19/servicemanager-beta/</guid>
		<description><![CDATA[
Despu&#233;s de muchos d&#237;as sin poder postear por diversos motivos (primero router que no sincroniza en d&#237;as, luego se me muri&#243; el O.S. y luego la constante acumulaci&#243;n de trabajo en el curro) vuelvo y con sorpresas. 
Acabo de terminar una aplicaci&#243;n (en su primera beta) que os ayudara a gestionar los Services de los [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.dubasdey.com/wp-content/uploads/2007/04/logophp.png' alt='PHP' /><br />
Despu&eacute;s de muchos d&iacute;as sin poder postear por diversos motivos (primero router que no sincroniza en d&iacute;as, luego se me muri&oacute; el <abbr lang="en" title="Operative System">O.S.</abbr> y luego la constante acumulaci&oacute;n de trabajo en el curro) vuelvo y con sorpresas. </p>
<p>Acabo de terminar una aplicaci&oacute;n (en su primera beta) que os ayudara a gestionar los Services de los Servidores m&aacute;s habituales. En esta primera versi&oacute;n a&ntilde;ad&iacute; <a href="http://www.apache.org" target="_blank" title="Apache">Apache</a>, <a href="http://www.mysql.com" target="_blank" title="MySQL">MySQL</a> (en <a href="http://www.melkorcete.com/index.php?p=5" target="_blank" title="http://www.melkorcete.com">este articulo</a> ten&eacute;is como instalarlo como un servicio, ya que por defecto no lo hace), <a href="http://es.wikipedia.org/wiki/SQL_Server" target="_blank" title="SQL Server">SQL Server</a> y el <a href="http://es.wikipedia.org/wiki/IIS" target="_blank" title="Internet Information Server">IIS</a>.</p>
<p>La aplicaci&oacute;n es sencilla y practica. Un icono en la barra de tareas que tiene un men&uacute; contextual que carga con las opciones disponibles seg&uacute;n los servers que teng&aacute;is instalados. Desde ah&iacute; podr&eacute;is detener o iniciar cualquiera de ellos con un simple click.</p>
<p>Tambi&eacute;n incorpor&eacute; una opci&oacute;n para que arranque autom&aacute;ticamente con Windows si se desea. </p>
<p>Requiere el <a href="http://es.wikipedia.org/wiki/Framework" target="_blank" title="Framework de .NET">Framework de .NET</a> ya que esta programado en <a href="http://es.wikipedia.org/wiki/C_sharp" target="_blank" title="C Sharp">C#</a> pero pod&eacute;is bajarlo gratuitamente desde el enlace que os dejo aqu&iacute;. Si ten&eacute;is alguna sugerencia ya sab&eacute;is donde encontrarme.</p>
<p><strong>Framework 1.1 :</strong> <a href="http://www.microsoft.com/downloads/details.aspx?displaylang=es&amp;FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3" target="_blank" title="Framework">descargar</a>.<br />
</p>
<p><strong>ServiceManager :</strong>  <a href='http://www.dubasdey.com/wp-content/uploads/2007/04/servicemanager.zip' title='Service Manager'>Descargar</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dubasdey.com/2007/04/19/servicemanager-beta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compilar codigo con .NET</title>
		<link>http://www.dubasdey.com/2006/12/03/compilar-codigo-con-net/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=compilar-codigo-con-net</link>
		<comments>http://www.dubasdey.com/2006/12/03/compilar-codigo-con-net/#comments</comments>
		<pubDate>Sun, 03 Dec 2006 08:53:48 +0000</pubDate>
		<dc:creator>Kuroneko</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.dubasdey.com/2006/12/03/compilar-codigo-con-net/</guid>
		<description><![CDATA[Un ejemplo de como compilar codigo fuente usando .NET




 


Public Function CompileCommands() As String

	

	' Creamos un compilador, en este caso para VB


	Dim compilador As System.CodeDom.Compiler.CodeDomProvider


	compilador = VBCodeProvider.CreateProvider("VB")

	

	'Definimos parametros para compilar


	'generar en memoria


	'no generar ejecutable (hacer libreria)


	'el nombre del ensamblado y de la clase principal

	

	Dim params As New System.CodeDom.Compiler.CompilerParameters()


	params.GenerateInMemory = True


	params.GenerateExecutable = False


	params.OutputAssembly = "commands.dll"


	params.MainClass = [...]]]></description>
			<content:encoded><![CDATA[<p>Un ejemplo de como compilar codigo fuente usando .NET</p>
<p><code></p>
<pre class="vbnet" style="color: #000066; border: 1px solid #d0d0d0;">
<ol>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">Public</span> <span class="kw6">Function</span> CompileCommands<span class="br0">(</span><span class="br0">)</span> <span class="kw2">As</span> <span class="kw2">String</span></div>
</li>
<li class="li1">	</li>
<li class="li1">
<div class="de1">	<span class="co1">' Creamos un compilador, en este caso para VB</span></div>
</li>
<li class="li2">
<div class="de2">	<span class="kw6">Dim</span> compilador <span class="kw2">As</span> System.<span class="me1">CodeDom</span>.<span class="me1">Compiler</span>.<span class="me1">CodeDomProvider</span></div>
</li>
<li class="li1">
<div class="de1">	compilador = VBCodeProvider.<span class="me1">CreateProvider</span><span class="br0">(</span><span class="st0">"VB"</span><span class="br0">)</span></div>
</li>
<li class="li1">	</li>
<li class="li1">
<div class="de1">	<span class="co1">'Definimos parametros para compilar</span></div>
</li>
<li class="li1">
<div class="de1">	<span class="co1">'generar en memoria</span></div>
</li>
<li class="li2">
<div class="de2">	<span class="co1">'no generar ejecutable (hacer libreria)</span></div>
</li>
<li class="li1">
<div class="de1">	<span class="co1">'el nombre del ensamblado y de la clase principal</span></div>
</li>
<li class="li1">	</li>
<li class="li1">
<div class="de1">	<span class="kw6">Dim</span> params <span class="kw2">As</span> <span class="kw2">New</span> System.<span class="me1">CodeDom</span>.<span class="me1">Compiler</span>.<span class="me1">CompilerParameters</span><span class="br0">(</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1">	params.<span class="me1">GenerateInMemory</span> = <span class="kw1">True</span></div>
</li>
<li class="li2">
<div class="de2">	params.<span class="me1">GenerateExecutable</span> = <span class="kw1">False</span></div>
</li>
<li class="li1">
<div class="de1">	params.<span class="me1">OutputAssembly</span> = <span class="st0">"commands.dll"</span></div>
</li>
<li class="li1">
<div class="de1">	params.<span class="me1">MainClass</span> = <span class="st0">"command"</span></div>
</li>
<li class="li1">
<div class="de1">	params.<span class="me1">IncludeDebugInformation</span> = <span class="kw1">False</span></div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li2">
<div class="de2">	<span class="co1">' a&ntilde;adimos las referencias que necesitemos</span></div>
</li>
<li class="li1">
<div class="de1">	params.<span class="me1">ReferencedAssemblies</span>.<span class="me1">Add</span><span class="br0">(</span><span class="st0">"referencias.exe"</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1">	<span class="co1">' A&ntilde;adimos los ensamblados del Dominio actual</span></div>
</li>
<li class="li1">
<div class="de1">	<span class="kw6">Dim</span> ASM <span class="kw2">As</span> System.<span class="me1">Reflection</span>.<span class="kw2">Assembly</span></div>
</li>
<li class="li2">
<div class="de2"> </div>
</li>
<li class="li1">
<div class="de1">	<span class="kw2">For</span> <span class="kw6">Each</span> ASM In AppDomain.<span class="me1">CurrentDomain</span>.<span class="me1">GetAssemblies</span><span class="br0">(</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1">		params.<span class="me1">ReferencedAssemblies</span>.<span class="me1">Add</span><span class="br0">(</span>ASM.<span class="me1">Location</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1">	<span class="kw2">Next</span></div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li2">
<div class="de2">	<span class="co1">' Compilamos, en este caso desde un archivo de codigo fuente,</span></div>
</li>
<li class="li1">
<div class="de1">	<span class="co1">' con los parametros establecidos anteriormente.</span></div>
</li>
<li class="li1">
<div class="de1">	<span class="co1">' Nos devuelve una clase con la informacion del resultado de la</span></div>
</li>
<li class="li1">
<div class="de1">	<span class="co1">' operacion</span></div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li2">
<div class="de2">	<span class="kw6">Dim</span> Results <span class="kw2">As</span> System.<span class="me1">CodeDom</span>.<span class="me1">Compiler</span>.<span class="me1">CompilerResults</span></div>
</li>
<li class="li1">
<div class="de1">	Results = compilador.<span class="me1">CompileAssemblyFromFile</span><span class="br0">(</span>params, <span class="st0">"commands.vb"</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1">	<span class="co1">' Si hay errores creamos una cadena de texto para mostrarlos.</span></div>
</li>
<li class="li1">
<div class="de1">	<span class="kw6">If</span> Results.<span class="me1">Errors</span>.<span class="me1">Count</span> > <span class="nu0">0</span> <span class="kw2">Then</span></div>
</li>
<li class="li2">
<div class="de2">		<span class="kw6">Dim</span> <a href="http://www.google.com/search?q=err+msdn.microsoft.com"><span class="kw3">Err</span></a> <span class="kw2">As</span> System.<span class="me1">CodeDom</span>.<span class="me1">Compiler</span>.<span class="me1">CompilerError</span></div>
</li>
<li class="li1">
<div class="de1">		<span class="kw6">Dim</span> strerr <span class="kw2">As</span> <span class="kw2">String</span> = <span class="st0">""</span></div>
</li>
<li class="li1">
<div class="de1">		<span class="kw2">For</span> <span class="kw6">Each</span> <a href="http://www.google.com/search?q=err+msdn.microsoft.com"><span class="kw3">Err</span></a> In Results.<span class="me1">Errors</span></div>
</li>
<li class="li1">
<div class="de1">			strerr = strerr &#038; <a href="http://www.google.com/search?q=err+msdn.microsoft.com"><span class="kw3">Err</span></a>.<span class="me1">ErrorNumber</span> &#038; <span class="st0">": ["</span> &#038; <a href="http://www.google.com/search?q=err+msdn.microsoft.com"><span class="kw3">Err</span></a>.<span class="kw8">Line</span> &#038; <span class="st0">"] "</span> &#038; <a href="http://www.google.com/search?q=err+msdn.microsoft.com"><span class="kw3">Err</span></a>.<span class="me1">ErrorText</span> &#038; vbCrLf</div>
</li>
<li class="li1">
<div class="de1">		<span class="kw2">Next</span></div>
</li>
<li class="li2">
<div class="de2">		Return strerr</div>
</li>
<li class="li1">
<div class="de1">	<span class="kw6">End</span> <span class="kw6">If</span></div>
</li>
<li class="li1">
<div class="de1">	Return <span class="st0">""</span></div>
</li>
<li class="li1">
<div class="de1"> </div>
</li>
<li class="li1">
<div class="de1">      <span class="kw6">End</span> <span class="kw6">Function</span> </div>
</li>
</ol>
</pre>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dubasdey.com/2006/12/03/compilar-codigo-con-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Perfiles con ASP.NET 2.0</title>
		<link>http://www.dubasdey.com/2006/10/22/perfiles-con-aspnet-20/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=perfiles-con-aspnet-20</link>
		<comments>http://www.dubasdey.com/2006/10/22/perfiles-con-aspnet-20/#comments</comments>
		<pubDate>Sun, 22 Oct 2006 08:48:45 +0000</pubDate>
		<dc:creator>Kuroneko</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.dubasdey.com/2006/10/22/perfiles-con-aspnet-20/</guid>
		<description><![CDATA[En ASP.NET 2.0 podemos definir perfiles para nuestros usuarios, estos son una o mas propiedades que nosotros definimos que se guardaran junto con la informaci&#243;n de cada usuario registrado en la pagina y que ser&#225;n tambi&#233;n almacenados en la base de datos SQL Server que suele integrar por defecto el ASP.NET, esto nos permitir&#225; por [...]]]></description>
			<content:encoded><![CDATA[<p>En ASP.NET 2.0 podemos definir perfiles para nuestros usuarios, estos son una o mas propiedades que nosotros definimos que se guardaran junto con la informaci&oacute;n de cada usuario registrado en la pagina y que ser&aacute;n tambi&eacute;n almacenados en la base de datos SQL Server que suele integrar por defecto el ASP.NET, esto nos permitir&aacute; por ejemplo a&ntilde;adir a un usuario un contador de visitas que guarde el numero de veces que ha visitado la pagina.
<p>&nbsp; </p>
<p>Lo primero que tendremos que hacer es a&ntilde;adir al <strong>web.config</strong> en el espacio <strong>System.Web</strong> la informaci&oacute;n de los campos que queremos a&ntilde;adir al perfil de ese usuario.</p>
<p>&nbsp;</p>
<pre class="xml" style="border-right: #d0d0d0 1px solid; border-top: #d0d0d0 1px solid; border-left: #d0d0d0 1px solid; color: #000066; border-bottom: #d0d0d0 1px solid">
<ol>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;profile <span><span class="re0">enable</span>=<span class="st0">"true"</span><span class="re2">&gt;</span></span></div>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;properties&gt;</span></span></div>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;add <span class="re0">name</span>=<span class="st0">"visitas"</span> <span class="re0">type</span>=<span class="st0">"System.Int32"</span> defaultValue =<span class="st0">"0"</span> <span class="re2">/&gt;</span></span></div>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/properties<span class="re2">&gt;</span></span></span></div>
<li class="li2">
<div class="de2"><span class="sc3"><span class="re1">&lt;/profile<span class="re2">&gt;</span></span></span> </div>
</li>
</ol>
</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>El campo <strong>name</strong> define el nombre de la propiedad y es obligatorio, el resto de campos es opcional. <strong>Type</strong> define el tipo de datos, ha de ser un tipo de datos serializable y <strong>defaultValue</strong> define el valor inicial que le asignamos.
<p>&nbsp;
<p>Con esto definimos una propiedad nueva para el perfil del usuario. La propiedad <strong>visitas</strong> es accesible ahora desde el objeto <strong>Profile</strong>, cualquier modificaci&oacute;n que hagamos a las propiedades de <strong>Profile</strong> se guardara autom&aacute;ticamente en los datos del perfil.</p>
<p>&nbsp;</p>
<pre class="vbnet" style="border-right: #d0d0d0 1px solid; border-top: #d0d0d0 1px solid; border-left: #d0d0d0 1px solid; color: #000066; border-bottom: #d0d0d0 1px solid">
<ol>
<li class="li1">
<div class="de1">Label1.<span class="me1">Text</span>= <span class="st0">"Visitas"</span> &amp; Profile.<span class="me1">visitas</span>.<span class="me1">ToString</span></div>
<li class="li1">
<div class="de1">Profile.<span class="me1">visitas</span>+=<span class="nu0">1</span></div>
</li>
</ol>
</pre>
<p class="li1">&nbsp;</p>
<p>&nbsp;</p>
<p>Con esto mostrar&iacute;amos la informaci&oacute;n de la propiedad <strong>visitas</strong> almacenada y acto seguido a&ntilde;adir&iacute;amos 1 a las visitas guard&aacute;ndose este valor en el perfil de usuario autom&aacute;ticamente.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dubasdey.com/2006/10/22/perfiles-con-aspnet-20/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Configuraci&#243;n de aplicaciones con VS2005</title>
		<link>http://www.dubasdey.com/2006/10/07/configuracion-de-aplicaciones-con-vs2005/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=configuracion-de-aplicaciones-con-vs2005</link>
		<comments>http://www.dubasdey.com/2006/10/07/configuracion-de-aplicaciones-con-vs2005/#comments</comments>
		<pubDate>Sat, 07 Oct 2006 08:47:31 +0000</pubDate>
		<dc:creator>Kuroneko</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.dubasdey.com/2006/10/07/configuracion-de-aplicaciones-con-vs2005/</guid>
		<description><![CDATA[Uno de los elementos m&#225;s comunes de una aplicaci&#243;n es un espacio donde guardar los datos de configuraci&#243;n de nuestra aplicaci&#243;n. Con VS 2005 esto se hace muy sencillo ya que provee un sistema para tener nuestras configuraciones.
Para crear un archivo de configuraciones hemos de ir al panel de configuraci&#243;n del proyecto (My Project) y [...]]]></description>
			<content:encoded><![CDATA[<p>Uno de los elementos m&aacute;s comunes de una aplicaci&oacute;n es un espacio donde guardar los datos de configuraci&oacute;n de nuestra aplicaci&oacute;n. Con VS 2005 esto se hace muy sencillo ya que provee un sistema para tener nuestras configuraciones.
<p>Para crear un archivo de configuraciones hemos de ir al panel de configuraci&oacute;n del proyecto (My Project) y en el encontraremos una solapa “Configuraci&oacute;n” donde crearemos nuestra configuraci&oacute;n, asign&aacute;ndole un nombre, si es configuraci&oacute;n de usuario o de aplicaci&oacute;n y si queremos un valor inicial.</p>
<p>&nbsp;</p>
<p><a href='http://www.dubasdey.com/wp-content/uploads/2007/03/post_015.jpg' title='Cofiguracion'><img src='http://www.dubasdey.com/wp-content/uploads/2007/03/post_015.miniatura.jpg' alt='Cofiguracion' /></a></p>
<p>Las configuraciones de usuario son aquellas que se pueden cambiar en tiempo de ejecuci&oacute;n y las de Aplicaci&oacute;n son configuraciones fijas de la aplicaci&oacute;n de solo lectura. </p>
<p>Una vez tenemos nuestro esquema creado para acceder a las propiedades desde Visual Basic.NET solo tenemos que usar el objeto especial “My” especial de VS2005, entre los elementos que encontraremos hay uno llamado “settings” el cual contiene para cada valor que insertamos en “Configuraci&oacute;n” una propiedad, de lectura y escritura si la clave era de usuario o solo lectura si era de aplicaci&oacute;n.
<p>En el objeto settings tambi&eacute;n encontramos algunos m&eacute;todos &&uacute;acute;tiles como son:
<p>&nbsp;
<p>&nbsp;
<ul>
<li>Reset, devuelve las propiedades a sus valores por defecto
<li>Reload, vuelve a cargar las propiedades
<li>Save, salva los valores que hemos cambiado en las propiedades</li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>En el objeto settings se puede tener cualquier objeto serializable por lo que se puede guardar una gran cantidad de tipos de datos.<br />Los datos se guardan en una subcarpeta de “Configuraci&oacute;n local\Datos de programa” de el perfil actual. Por lo que la configuraci&oacute;n es independiente para cada perfil.<br />Los datos se guardan en un archivo XML por lo que no es un sistema recomendable para guardar contrase&ntilde;as u otros datos sensibles.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dubasdey.com/2006/10/07/configuracion-de-aplicaciones-con-vs2005/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Generar un GUID con .NET</title>
		<link>http://www.dubasdey.com/2006/10/04/generar-un-guid-con-net/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=generar-un-guid-con-net</link>
		<comments>http://www.dubasdey.com/2006/10/04/generar-un-guid-con-net/#comments</comments>
		<pubDate>Wed, 04 Oct 2006 08:47:02 +0000</pubDate>
		<dc:creator>Kuroneko</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.dubasdey.com/2006/10/04/generar-un-guid-con-net/</guid>
		<description><![CDATA[En el post anterior hablaba sobre la creaci&#243;n de plugins para el Windows Live Writer y un poco del GUID, ahora voy a ense&#241;aros como crear un GUID con .NET.
La verdad que es una chorrada. El .NET implementa una clase System.Guid la cual tienen un m&#233;todo est&#225;tico para generar nuevos elementos Guid, y usando el [...]]]></description>
			<content:encoded><![CDATA[<p>En el post anterior hablaba sobre la <a href="http://www.dubasdey.com/index.php?p=25">creaci&oacute;n de plugins para el Windows Live Writer</a> y un poco del <strong>GUID</strong>, ahora voy a ense&ntilde;aros como crear un <strong>GUID</strong> con .NET.</p>
<p>La verdad que es una chorrada. El .NET implementa una clase <strong>System.Guid</strong> la cual tienen un m&eacute;todo est&aacute;tico para generar nuevos elementos <strong>Guid</strong>, y usando el m&eacute;todo <strong>ToString</strong> de dicho elemento podemos obtener la cadena del <strong>GUID</strong>.</p>
<p>&nbsp;</p>
<pre class="vbnet" style="border-right: #d0d0d0 1px solid; border-top: #d0d0d0 1px solid; border-left: #d0d0d0 1px solid; color: #000066; border-bottom: #d0d0d0 1px solid">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">Me</span>.<span class="me1">txtguid</span>.<span class="me1">Text</span> = System.<span class="me1">Guid</span>.<span class="me1">NewGuid</span>.<span class="me1">ToString</span> </div>
</li>
</ol>
</pre>
<p>&nbsp;</p>
</p>
<p> <del datetime="2007-03-12T18:55:12+00:00">
<p>Y para terminar he creado una peque&ntilde;a utilidad para los GUID (simple simple xD)
<p>&nbsp;
<p><img src="http://www.dubasdey.com/apps/guidgen/guidgen.png">
<p><a href="http://www.dubasdey.com/apps/guidgen/GuidGen.zip">Guidgen 1.0</a>&nbsp;(requiere .NET 2.0)</p>
<p></del></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dubasdey.com/2006/10/04/generar-un-guid-con-net/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Usar process para abrir documentos,imprimir,lanzar una url&#8230;</title>
		<link>http://www.dubasdey.com/2006/09/13/usar-process-para-abrir-documentosimprimirlanzar-una-url/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=usar-process-para-abrir-documentosimprimirlanzar-una-url</link>
		<comments>http://www.dubasdey.com/2006/09/13/usar-process-para-abrir-documentosimprimirlanzar-una-url/#comments</comments>
		<pubDate>Wed, 13 Sep 2006 08:42:25 +0000</pubDate>
		<dc:creator>Kuroneko</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://www.dubasdey.com/2006/09/13/usar-process-para-abrir-documentosimprimirlanzar-una-url/</guid>
		<description><![CDATA[&#160;En el .NET Framework tenemos una clase &#8220;System.Diagnostics.Process&#8221; que nos permite realizar operaciones con procesos. Una de sus utilidades puede ser realizar una acci&#243;n sobre un documento, url,&#8230;
Las acciones que podemos realizar sobre el objeto vienen determinadas por los verbos que tenga. Un verbo es cada una de las acciones que se pueden realizar sobre [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;En el .NET Framework tenemos una clase &ldquo;System.Diagnostics.Process&rdquo; que nos permite realizar operaciones con procesos. Una de sus utilidades puede ser realizar una acci&oacute;n sobre un documento, url,&hellip;</p>
<p>Las acciones que podemos realizar sobre el objeto vienen determinadas por los verbos que tenga. Un verbo es cada una de las acciones que se pueden realizar sobre un tipo de objeto. Por ejemplo un archivo de bloc de notas (txt) tendr&aacute; los verbos &ldquo;Open&rdquo;y &ldquo;Print&rdquo;, podemos comprobar si damos bot&oacute;n derecho en un archivo txt como tiene esas opciones, cada una de las opciones que tiene es un verbo, que puede ser propio del bloc de notas o de otra aplicaci&oacute;n que tengamos instalada. Podemos tener por ejemplo para un archivo txt en verbo &ldquo;PrintPDF&rdquo; de una aplicaci&oacute;n de impresi&oacute;n a PDF que este asociada con el documento.</p>
<p>Para saber los verbos de un archivo deberemos mirar en la propiedad StartInfo , que es un objeto de tipo ProcessStartInfo, la propiedad verbs, que es un array de Verbos admitidos para el archivo que pasamos como par&aacute;metro al crear el Process.</p>
<pre class="vb">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">Dim</span> myProcess <span class="kw1">As</span> <span class="kw1">New</span> Process<span class="br0">(</span><span class="br0">)</span></div>
</li>
<li class="li1">
<div class="de1">myProcess.<span class="me1">StartInfo</span>.<span class="me1">FileName</span> = <span class="st0">&quot;http://www.dubasdey.com&quot;</span></div>
</li>
<li class="li1">
<div class="de1">myProcess.<span class="me1">StartInfo</span>.<span class="me1">Verb</span> = <span class="st0">&quot;Open&quot;</span></div>
</li>
<li class="li1">
<div class="de1">myProcess.<span class="me1">Start</span><span class="br0">(</span><span class="br0">)</span></div>
</li>
</ol>
</pre>
<p>&nbsp;</p>
<p>&nbsp; </p>
<p class="MsoNormal">En las propiedades de inicio tambi&eacute;n podremos realizar otros ajustes, como redireccionar la salida de errores, la entrada est&aacute;ndar (para insertar datos desde nuestra aplicaci&oacute;n) o la salida est&aacute;ndar.</p>
<p class="MsoNormal">Cambiar el usuario que ejecutara la aplicaci&oacute;n (si el usuario tienen password tambi&eacute;n habr&aacute; que d&aacute;rselo)</p>
<p class="MsoNormal"></p>
<p>Y para finalizar solo hay que iniciar el proceso con Star(). </p>
]]></content:encoded>
			<wfw:commentRss>http://www.dubasdey.com/2006/09/13/usar-process-para-abrir-documentosimprimirlanzar-una-url/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Crear plugins para Windows Live! Writer</title>
		<link>http://www.dubasdey.com/2006/09/12/crear-plugins-para-windows-live-writer/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=crear-plugins-para-windows-live-writer</link>
		<comments>http://www.dubasdey.com/2006/09/12/crear-plugins-para-windows-live-writer/#comments</comments>
		<pubDate>Tue, 12 Sep 2006 18:43:18 +0000</pubDate>
		<dc:creator>Kuroneko</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Live Writer]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.dubasdey.com/2007/03/12/crear-plugins-para-windows-live-writer/</guid>
		<description><![CDATA[
Crear un plugin para Windows Live! Writer puede resultar muy sencillo. Existen dos formas de crear los plugins, una “Simple” donde simplemente mostramos un dialogo donde pedimos los datos que queramos y despu&#233;s creamos el HTML y otro m&#233;todo mas complejo en el cual adem&#225;s proveemos un control para poder editar el contenido que hemos [...]]]></description>
			<content:encoded><![CDATA[</p>
<p>Crear un plugin para Windows Live! Writer puede resultar muy sencillo. Existen dos formas de crear los plugins, una <em>“Simple”</em> donde simplemente mostramos un dialogo donde pedimos los datos que queramos y despu&eacute;s creamos el <em>HTML</em> y otro m&eacute;todo mas complejo en el cual adem&aacute;s proveemos un control para poder editar el contenido que hemos insertado.
<p>Hoy voy a explicar como hacer el plugin m&aacute;s simple. Solo hemos de empezar creando una Biblioteca de clases de .NET, Windows Live! Writer acepta vb.net y c# tanto sobre .NET 1.1 como 2.0 para los plugins
<p>A este proyecto hemos de importarle el ensamblado <strong>WindowsLive.Writer.Api.dll</strong> que se encuentra el la carpeta de nuestra instalaci&oacute;n de Windows Live! Writer e importar el espacio de nombres <strong>WindowsLive.Writer.Api</strong>, con esto ya tenemos todo listo para empezar a trabajar
<p>&nbsp;</p>
<pre class="csharp" style="border-right: #d0d0d0 1px solid; border-top: #d0d0d0 1px solid; border-left: #d0d0d0 1px solid; color: #000066; border-bottom: #d0d0d0 1px solid">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">using</span> <span class="kw5">System</span>.<span class="me1">Windows</span>.<span class="me1">Forms</span>;</div>
<li class="li1">
<div class="de1"><span class="kw1">using</span> WindowsLive.<span class="me1">Writer</span>.<span class="me1">Api</span>;</div>
<li class="li1">
<div class="de1"> </div>
<li class="li1">
<div class="de1"><span class="kw1">namespace</span> HelloWorldPlugin<span class="br0">{</span></div>
<li class="li2">
<div class="de2"> <span class="br0">[</span>WriterPlugin<span class="br0">(</span><span class="st0">"605EEA63-B54B-4e6d-A290-F5E9E8229FC1"</span>, <span class="st0">"Simple Hola Mundo"</span>, </div>
<li class="li1">
<div class="de1"> ImagePath = <span class="st0">"Imagenes.icono.png"</span>,</div>
<li class="li1">
<div class="de1"> PublisherUrl = <span class="st0">"http://www.dubasdey.com"</span>,</div>
<li class="li1">
<div class="de1"> Description = <span class="st0">"Escribe un mensaje en h2."</span><span class="br0">)</span><span class="br0">]</span></div>
<li class="li1">
<div class="de1"> </div>
<li class="li2">
<div class="de2"> <span class="br0">[</span>InsertableContentSource<span class="br0">(</span> <span class="st0">"Simple Hola Mundo"</span> <span class="br0">)</span><span class="br0">]</span></div>
<li class="li1">
<div class="de1"> <span class="kw1">public</span> <span class="kw4">class</span> SimpleHelloWorldPlugin : ContentSource<span class="br0">{</span></div>
<li class="li1">
<div class="de1"> <span class="kw1">public</span> SimpleHelloWorldPlugin<span class="br0">(</span><span class="br0">)</span><span class="br0">{</span><span class="br0">}</span></div>
<li class="li1">
<div class="de1"> </div>
<li class="li1">
<div class="de1"> <span class="kw1">public</span> <span class="kw1">override</span> DialogResult CreateContent<span class="br0">(</span>IWin32Window dialogOwner, <span class="kw1">ref</span> <span class="kw4">string</span> newContent<span class="br0">)</span><span class="br0">{</span></div>
<li class="li2">
<div class="de2"> <span class="co1">// Creamos el dialogo HelloWorldInsertForm, que contiene</span></div>
<li class="li1">
<div class="de1"> <span class="co1">// una caja de texto y la propiedad Message para obteber su valor</span></div>
<li class="li1">
<div class="de1"> HelloWorldInsertForm insertForm = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span class="kw3">new</span></a> HelloWorldInsertForm<span class="br0">(</span><span class="br0">)</span>;</div>
<li class="li1">
<div class="de1"> DialogResult result = insertForm.<span class="me1">ShowDialog</span><span class="br0">(</span><span class="br0">)</span>;</div>
<li class="li1">
<div class="de1"> <span class="kw1">if</span><span class="br0">(</span>result==DialogResult.<span class="me1">OK</span><span class="br0">)</span><span class="br0">{</span> <span class="co1">// Si el resultado es OK creamos el contenido</span></div>
<li class="li2">
<div class="de2"> newContent = <span class="st0">"&lt;h2&gt;"</span> + insertForm.<span class="me1">Message</span> + <span class="st0">"&lt;/h2&gt;"</span>; </div>
<li class="li1">
<div class="de1"> <span class="br0">}</span></div>
<li class="li1">
<div class="de1"> <span class="kw1">return</span> result;</div>
<li class="li1">
<div class="de1"> <span class="br0">}</span></div>
<li class="li1">
<div class="de1"> <span class="br0">}</span></div>
<li class="li2">
<div class="de2"><span class="br0">}</span> </div>
</li>
</ol>
</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Bien lo primero que vemos en el c&oacute;digo son una serie de atributos entre corchetes.<br />El primero, <strong>WriterPlugin</strong>, se usa para especificar que es un plugin de WindowsLive.Writer asi como una serie de propiedades del mismo. La primera cadena corresponde a un <strong>GUID</strong> que identificara &&uacute;acute;nicamente al plugin (cada plugin tiene que tener su GUID), despu&eacute;s tenemos el nombre del plugin, que es el nombre que tendr&aacute; a la vista, la siguiente cadena corresponde a la ruta (dentro del ensamblado) de una imagen PNG de 20&#215;18 p&iacute;xeles insertada como recurso incrustado que se usara como icono del plugin, los siguientes dos textos corresponden a una URL y una descripci&oacute;n para el Plugin.
<p>&nbsp;
<p>El siguiente atributo <strong>InsertableContentSource</strong> solo lleva el nombre del plugin y sirve para indicar que el plugin pertenece a un contenido insertable.
<p>&nbsp;
<p>Lo siguiente que necesitamos despues de a&ntilde;adir estos atributos a nuestra clase es que la clase herede de <strong>ContentSource</strong> y sobreescribir como vemos el metodo <strong>CreateContent</strong>.
<p>&nbsp;
<p><strong>CreateContent</strong> recive 2 parametros, el primero es el manejador de la ventana propietaria, para hacer un dialogo modal a esa ventana y el segundo es un valor de cadena por referencia donde escribiremos el codigo <em>HTML</em> que queramos depositar. Por ultimo el metodo devuelve un <strong>DialogResult</strong> con el que indicaremos si el usuario acepto las operaciones y cancelo. En esta funcion podremos hacer lo que necesitemos, por ejemplo crear un dialogo para pedir un texto como en el ejemplo y devolver ese texto como Heading 2 reescribiendo la cadena <strong>NewContent</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dubasdey.com/2006/09/12/crear-plugins-para-windows-live-writer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

