<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2enclosuresfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">

<channel>
	<title>Tecnico Programador</title>
	
	<link>http://tectonilogia.com</link>
	<description>Informatica, desarrollo, diseño y todo lo que pueda envolver a la tecnologia</description>
	<lastBuildDate>Thu, 09 May 2013 18:10:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/TecnicoMerlos" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="tecnicomerlos" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">TecnicoMerlos</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>App.Config/Web.Config Set/Get Value from AppSettings Section</title>
		<link>http://tectonilogia.com/appconfigwebconfig-setget-value-from-appsettings-section/</link>
		<comments>http://tectonilogia.com/appconfigwebconfig-setget-value-from-appsettings-section/#comments</comments>
		<pubDate>Thu, 09 May 2013 18:10:43 +0000</pubDate>
		<dc:creator>tecnico</dc:creator>
				<category><![CDATA[.Net C#]]></category>
		<category><![CDATA[Ayuda Técnica]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Apuntes]]></category>
		<category><![CDATA[Configuración]]></category>

		<guid isPermaLink="false">http://tectonilogia.com/?p=582</guid>
		<description><![CDATA[Como obtener y modificar los valores de la sección AppSettings de un fichero de configuración app.config/web.config. Para que no se olvide using System.Web.Configuration; using System.Configuration; System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration( new System.Configuration.ExeConfigurationFileMap() { ExeConfigFilename = webconfigFile }, System.Configuration.ConfigurationUserLevel.None); string oldValue = config.AppSettings.Settings[&#34;SomeKey&#34;].Value; config.AppSettings.Settings[&#34;SomeKey&#34;].Value = &#34;NewValue&#34;; config.Save(ConfigurationSaveMode.Modified);]]></description>
			<content:encoded><![CDATA[<p>Como obtener y modificar los valores de la sección AppSettings de un fichero de configuración app.config/web.config. Para que no se olvide</p>
<pre><code>using System.Web.Configuration;
using System.Configuration;

System.Configuration.Configuration config =
	System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(
		new System.Configuration.ExeConfigurationFileMap() {
			ExeConfigFilename = webconfigFile },
			System.Configuration.ConfigurationUserLevel.None);
string oldValue = config.AppSettings.Settings[&quot;SomeKey&quot;].Value;
config.AppSettings.Settings[&quot;SomeKey&quot;].Value = &quot;NewValue&quot;;
<strong>config.Save(ConfigurationSaveMode.Modified);</strong>
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://tectonilogia.com/appconfigwebconfig-setget-value-from-appsettings-section/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JQuery Post XML to MVC Controller Accepting POST parameters</title>
		<link>http://tectonilogia.com/jquery-post-xml-to-mvc-controller-accepting-post-parameters/</link>
		<comments>http://tectonilogia.com/jquery-post-xml-to-mvc-controller-accepting-post-parameters/#comments</comments>
		<pubDate>Wed, 08 May 2013 18:04:33 +0000</pubDate>
		<dc:creator>tecnico</dc:creator>
				<category><![CDATA[.Net C#]]></category>
		<category><![CDATA[Ayuda Técnica]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://tectonilogia.com/?p=580</guid>
		<description><![CDATA[<p><img width="229" height="220" src="http://tectonilogia.com/wp-content/uploads/2013/05/mvc-jquery.jpg" class="attachment-post-thumbnail wp-post-image" alt="mvc jquery" title="mvc jquery" /></p>Comunicación Ajax GET / POST. Cuando iniciamos una comunicación AJAX y enviamos información al servidor, se puede hacer por GET (los parámetros concatenados en la URI de la Request) o por POST, quedando ocultos. No sólo eso, sino que los parámetros están internos en la Request.

Una de las arquitecturas utilizadas en el desarrollo de un sitio web ASP.NET, para que quede el código un "poquito" estructurado, es JQuery + MVC. JQuery se encarga de la parte del Cliente y MVC <em>(Modelo Vista Controlador)</em> se encarga de separar la capa presentación de la capa de negocio.

Una vez introducidos, si queremos enviar un XML por JQuery a través de AJAX y que nuestro "Controller" lo recupere sin problemas, podemos hacer lo siguiente.

Parte JQuery que realiza la llamada AJAX hacia el servidor 
<span id="more-580"></span>
<pre><code>return $.ajax({
   url: GetFullPath(Url),//URL donde realizamos la llamada
   type: &#039;POST&#039;,
   dataType: dataType, //json, xml, ...
   data: dataJ, //Contiene la información que queremos enviar. Por Ej. un XML
   contentType: &#039;text/xml; charset=utf-8&#039;, //Configurarlo dependiente del tipo de dato
   cache: false
})
.success(function(data) {
   callDeferred.resolve(data);
})
.error(function(jqXHR, textStatus, errorThrown) {
   alert(jqXHR.status + &quot; &quot; + jqXHR.statusText + &quot; &quot; + jqXHR.responseText);
   callDeferred.reject();
});</code></pre>

Código del Controller
<pre><code>public class ResponseProcessController : Controller
{
	[AcceptVerbs(new string[] { &quot;POST&quot; })] //Por Ejemplo
	public ActionResult Do()
	{
		//La variable Request es accesible desde el propio Controller
		using (Stream receiveStream = Request.InputStream)
		{
			using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8))
			{
				documentContents = readStream.ReadToEnd();
			}
		}
		//To do with &quot;documentContents&quot;
	}
}</code></pre>]]></description>
			<content:encoded><![CDATA[<p><img width="229" height="220" src="http://tectonilogia.com/wp-content/uploads/2013/05/mvc-jquery.jpg" class="attachment-post-thumbnail wp-post-image" alt="mvc jquery" title="mvc jquery" /></p>Comunicación Ajax GET / POST. Cuando iniciamos una comunicación AJAX y enviamos información al servidor, se puede hacer por GET (los parámetros concatenados en la URI de la Request) o por POST, quedando ocultos. No sólo eso, sino que los parámetros están internos en la Request.

Una de las arquitecturas utilizadas en el desarrollo de un sitio web ASP.NET, para que quede el código un "poquito" estructurado, es JQuery + MVC. JQuery se encarga de la parte del Cliente y MVC <em>(Modelo Vista Controlador)</em> se encarga de separar la capa presentación de la capa de negocio.

Una vez introducidos, si queremos enviar un XML por JQuery a través de AJAX y que nuestro "Controller" lo recupere sin problemas, podemos hacer lo siguiente.

Parte JQuery que realiza la llamada AJAX hacia el servidor 
<span id="more-580"></span>
<pre><code>return $.ajax({
   url: GetFullPath(Url),//URL donde realizamos la llamada
   type: &#039;POST&#039;,
   dataType: dataType, //json, xml, ...
   data: dataJ, //Contiene la información que queremos enviar. Por Ej. un XML
   contentType: &#039;text/xml; charset=utf-8&#039;, //Configurarlo dependiente del tipo de dato
   cache: false
})
.success(function(data) {
   callDeferred.resolve(data);
})
.error(function(jqXHR, textStatus, errorThrown) {
   alert(jqXHR.status + &quot; &quot; + jqXHR.statusText + &quot; &quot; + jqXHR.responseText);
   callDeferred.reject();
});</code></pre>

Código del Controller
<pre><code>public class ResponseProcessController : Controller
{
	[AcceptVerbs(new string[] { &quot;POST&quot; })] //Por Ejemplo
	public ActionResult Do()
	{
		//La variable Request es accesible desde el propio Controller
		using (Stream receiveStream = Request.InputStream)
		{
			using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8))
			{
				documentContents = readStream.ReadToEnd();
			}
		}
		//To do with &quot;documentContents&quot;
	}
}</code></pre>]]></content:encoded>
			<wfw:commentRss>http://tectonilogia.com/jquery-post-xml-to-mvc-controller-accepting-post-parameters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WCF, Logs de las Peticiones antes y despues de procesar, AfterReceiveRequest y BeforeSendReply</title>
		<link>http://tectonilogia.com/wcf-logs-de-las-peticiones-antes-y-despues-de-procesar-afterreceiverequest-y-beforesendreply/</link>
		<comments>http://tectonilogia.com/wcf-logs-de-las-peticiones-antes-y-despues-de-procesar-afterreceiverequest-y-beforesendreply/#comments</comments>
		<pubDate>Tue, 07 May 2013 18:43:29 +0000</pubDate>
		<dc:creator>tecnico</dc:creator>
				<category><![CDATA[.Net C#]]></category>
		<category><![CDATA[Ayuda Técnica]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Apuntes]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://tectonilogia.com/?p=578</guid>
		<description><![CDATA[<p><img width="128" height="121" src="http://tectonilogia.com/wp-content/uploads/2013/05/wcf.jpg" class="attachment-post-thumbnail wp-post-image" alt="wcf" title="wcf" /></p>Utilizando IServiceBehavior y IDispatchMessageInspector podemos suscribirnos a los eventos después de recibir la "request" y antes de enviar la "response". Tener los logs de una comunicación son muy importantes. Lo diferente con en el caso de WCF <em>(Windows Communication Foundation)</em> es que prácticamente sólo configuramos, ya que casi todo el trabajo sucio lo hace .NET. Por este motivo es tan interesante este artículo, porque además de que WCF nos hace el mundo de la comunicación mucho más sencilla, también podemos registrar los mensajes recibidos y enviados. 

Existen otras técnicas para registrar toda la comunicación <em>(System.Diagnostics)</em>, el problema que encontré es que podía llegar a dejar demasiada información, lo que me resultaba inservible. De todas las soluciones que estuve probando esta era la que mejor se adaptaba a lo que necesitaba.

La clave está en crear un "CustomAttribute" para nuestro servidor, y que este registre la información que necesitamos.
<span id="more-578"></span>
<pre><code>public class WsBehavior : Attribute, IServiceBehavior
{
	&#035;region IServiceBehavior Members
	public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, System.Collections.ObjectModel.Collection&lt;ServiceEndpoint&gt; endpoints, BindingParameterCollection bindingParameters)
	{
		return;
	}

	public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
	{
		return;
	}

	public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
	{
		{
			foreach (ChannelDispatcher cDispatcher in serviceHostBase.ChannelDispatchers)
				foreach (EndpointDispatcher eDispatcher in cDispatcher.Endpoints)
					eDispatcher.DispatchRuntime.MessageInspectors.Add(new WsInspector());
		}
	}
	&#035;endregion
}

public class WsInspector : Attribute, IDispatchMessageInspector
{
	&#035;region IDispatchMessageInspector Members
	public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel, InstanceContext instanceContext)
	{
		if (log.IsDebugEnabled)
		{
			log.Debug(string.Format(&quot;AfterReceiveRequest URI:{0}&quot;, request.Properties.Via.AbsoluteUri));
			MessageBuffer buffer = request.CreateBufferedCopy(int.MaxValue);
			Message msg = buffer.CreateMessage();

			String content = String.Empty;
			System.Xml.XmlDictionaryReader reader = null;
			using (reader = msg.GetReaderAtBodyContents())
			{
				content = reader.ReadOuterXml();
			}
			request = buffer.CreateMessage();
			log.Debug(string.Format(&quot;AfterReceiveRequest message:\n{0}&quot;, content.ToString()));                
		}

		return null;
	}

	public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
	{
		if (log.IsDebugEnabled)
		{
			MessageBuffer buffer = reply.CreateBufferedCopy(int.MaxValue);
			Message msg = buffer.CreateMessage();
			log.Debug(string.Format(&quot;BeforeSendReply reply:\n{0}&quot;, msg.ToString()));
			reply = buffer.CreateMessage();
		}
	}
	&#035;endregion
}</code></pre>

Para utilizarlo sólo tenemos que agregar el "CustomAttribute" a la clase que implementa la interfaz que define el Contrato.
<pre><code>[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
<span style="color: red;">[WsBehavior]</span>
public class WsBts :  IMyServiceContractDefinition  </code></pre>

De momento esto, espero sea interesante.]]></description>
			<content:encoded><![CDATA[<p><img width="128" height="121" src="http://tectonilogia.com/wp-content/uploads/2013/05/wcf.jpg" class="attachment-post-thumbnail wp-post-image" alt="wcf" title="wcf" /></p>Utilizando IServiceBehavior y IDispatchMessageInspector podemos suscribirnos a los eventos después de recibir la "request" y antes de enviar la "response". Tener los logs de una comunicación son muy importantes. Lo diferente con en el caso de WCF <em>(Windows Communication Foundation)</em> es que prácticamente sólo configuramos, ya que casi todo el trabajo sucio lo hace .NET. Por este motivo es tan interesante este artículo, porque además de que WCF nos hace el mundo de la comunicación mucho más sencilla, también podemos registrar los mensajes recibidos y enviados. 

Existen otras técnicas para registrar toda la comunicación <em>(System.Diagnostics)</em>, el problema que encontré es que podía llegar a dejar demasiada información, lo que me resultaba inservible. De todas las soluciones que estuve probando esta era la que mejor se adaptaba a lo que necesitaba.

La clave está en crear un "CustomAttribute" para nuestro servidor, y que este registre la información que necesitamos.
<span id="more-578"></span>
<pre><code>public class WsBehavior : Attribute, IServiceBehavior
{
	&#035;region IServiceBehavior Members
	public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, System.Collections.ObjectModel.Collection&lt;ServiceEndpoint&gt; endpoints, BindingParameterCollection bindingParameters)
	{
		return;
	}

	public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
	{
		return;
	}

	public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
	{
		{
			foreach (ChannelDispatcher cDispatcher in serviceHostBase.ChannelDispatchers)
				foreach (EndpointDispatcher eDispatcher in cDispatcher.Endpoints)
					eDispatcher.DispatchRuntime.MessageInspectors.Add(new WsInspector());
		}
	}
	&#035;endregion
}

public class WsInspector : Attribute, IDispatchMessageInspector
{
	&#035;region IDispatchMessageInspector Members
	public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel, InstanceContext instanceContext)
	{
		if (log.IsDebugEnabled)
		{
			log.Debug(string.Format(&quot;AfterReceiveRequest URI:{0}&quot;, request.Properties.Via.AbsoluteUri));
			MessageBuffer buffer = request.CreateBufferedCopy(int.MaxValue);
			Message msg = buffer.CreateMessage();

			String content = String.Empty;
			System.Xml.XmlDictionaryReader reader = null;
			using (reader = msg.GetReaderAtBodyContents())
			{
				content = reader.ReadOuterXml();
			}
			request = buffer.CreateMessage();
			log.Debug(string.Format(&quot;AfterReceiveRequest message:\n{0}&quot;, content.ToString()));                
		}

		return null;
	}

	public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
	{
		if (log.IsDebugEnabled)
		{
			MessageBuffer buffer = reply.CreateBufferedCopy(int.MaxValue);
			Message msg = buffer.CreateMessage();
			log.Debug(string.Format(&quot;BeforeSendReply reply:\n{0}&quot;, msg.ToString()));
			reply = buffer.CreateMessage();
		}
	}
	&#035;endregion
}</code></pre>

Para utilizarlo sólo tenemos que agregar el "CustomAttribute" a la clase que implementa la interfaz que define el Contrato.
<pre><code>[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
<span style="color: red;">[WsBehavior]</span>
public class WsBts :  IMyServiceContractDefinition  </code></pre>

De momento esto, espero sea interesante.]]></content:encoded>
			<wfw:commentRss>http://tectonilogia.com/wcf-logs-de-las-peticiones-antes-y-despues-de-procesar-afterreceiverequest-y-beforesendreply/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Suscribirse a los eventos del Visor de Sucesos para generar logs</title>
		<link>http://tectonilogia.com/suscribirse-a-los-eventos-del-visor-de-sucesos-para-generar-logs/</link>
		<comments>http://tectonilogia.com/suscribirse-a-los-eventos-del-visor-de-sucesos-para-generar-logs/#comments</comments>
		<pubDate>Mon, 22 Apr 2013 22:45:16 +0000</pubDate>
		<dc:creator>tecnico</dc:creator>
				<category><![CDATA[.Net C#]]></category>
		<category><![CDATA[Ayuda Técnica]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Apuntes]]></category>
		<category><![CDATA[EventViewer]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://tectonilogia.com/?p=576</guid>
		<description><![CDATA[<p><img width="258" height="213" src="http://tectonilogia.com/wp-content/uploads/2013/04/errorlog.png" class="attachment-post-thumbnail wp-post-image" alt="errorlog" title="errorlog" /></p>Suscribirse a los eventos del Event Viewer para imprimir logs relacionados con nuestra aplicación. Esto es útil si queremos que en un mismo fichero de logs aparezcan los logs de la aplicación y los logs que se generan en el propio visor de sucesos del Windows, directa (mediante "System.Diagnostics") o indirectamente (por error de la aplicación). Aunque parezca que no sea para tanto si que es interesante, como me ha sido útil en caso particular, me lo guardo para tenerlo bien apuntadito.

Con el siguiente código tendremos suficiente para ir tirando y saber como suscribirnos a los eventos del event viewer.

<pre><code>String LogMonitor = &quot;Application&quot;;
if (EventLog.Exists(LogMonitor))
{
	if (eventLog == null)
	{
		eventLog = new EventLog(LogMonitor);
		eventLog.EntryWritten += new EntryWrittenEventHandler(EventLog_EntryWritten);
		eventLog.EnableRaisingEvents = true;
	}
}
</code></pre>
<span id="more-576"></span>
<pre><code>static void EventLog_EntryWritten(object sender, EntryWrittenEventArgs e)
{
	if (e.Entry.Source.ToUpper().Contains(&quot;CUSTOM SOURCE&quot;))
	{
		switch (e.Entry.EntryType)
		{
			case EventLogEntryType.Error:
			case EventLogEntryType.FailureAudit:
				if (log.IsErrorEnabled) { log.Error(GetEntryMessage(e.Entry)); }
				break;
			case EventLogEntryType.Warning:
				if (log.IsWarnEnabled) { log.Warn(GetEntryMessage(e.Entry)); }
				break;
			default:
				if (log.IsDebugEnabled) { log.Debug(GetEntryMessage(e.Entry)); }
				break;

		}
	}
	
}</code></pre>]]></description>
			<content:encoded><![CDATA[<p><img width="258" height="213" src="http://tectonilogia.com/wp-content/uploads/2013/04/errorlog.png" class="attachment-post-thumbnail wp-post-image" alt="errorlog" title="errorlog" /></p>Suscribirse a los eventos del Event Viewer para imprimir logs relacionados con nuestra aplicación. Esto es útil si queremos que en un mismo fichero de logs aparezcan los logs de la aplicación y los logs que se generan en el propio visor de sucesos del Windows, directa (mediante "System.Diagnostics") o indirectamente (por error de la aplicación). Aunque parezca que no sea para tanto si que es interesante, como me ha sido útil en caso particular, me lo guardo para tenerlo bien apuntadito.

Con el siguiente código tendremos suficiente para ir tirando y saber como suscribirnos a los eventos del event viewer.

<pre><code>String LogMonitor = &quot;Application&quot;;
if (EventLog.Exists(LogMonitor))
{
	if (eventLog == null)
	{
		eventLog = new EventLog(LogMonitor);
		eventLog.EntryWritten += new EntryWrittenEventHandler(EventLog_EntryWritten);
		eventLog.EnableRaisingEvents = true;
	}
}
</code></pre>
<span id="more-576"></span>
<pre><code>static void EventLog_EntryWritten(object sender, EntryWrittenEventArgs e)
{
	if (e.Entry.Source.ToUpper().Contains(&quot;CUSTOM SOURCE&quot;))
	{
		switch (e.Entry.EntryType)
		{
			case EventLogEntryType.Error:
			case EventLogEntryType.FailureAudit:
				if (log.IsErrorEnabled) { log.Error(GetEntryMessage(e.Entry)); }
				break;
			case EventLogEntryType.Warning:
				if (log.IsWarnEnabled) { log.Warn(GetEntryMessage(e.Entry)); }
				break;
			default:
				if (log.IsDebugEnabled) { log.Debug(GetEntryMessage(e.Entry)); }
				break;

		}
	}
	
}</code></pre>]]></content:encoded>
			<wfw:commentRss>http://tectonilogia.com/suscribirse-a-los-eventos-del-visor-de-sucesos-para-generar-logs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Acceso a Ficheros mediante credenciales de forma remota</title>
		<link>http://tectonilogia.com/acceso-a-ficheros-mediante-credenciales-de-forma-remota/</link>
		<comments>http://tectonilogia.com/acceso-a-ficheros-mediante-credenciales-de-forma-remota/#comments</comments>
		<pubDate>Mon, 22 Apr 2013 07:51:30 +0000</pubDate>
		<dc:creator>tecnico</dc:creator>
				<category><![CDATA[.Net C#]]></category>
		<category><![CDATA[Ayuda Técnica]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Sistemas]]></category>
		<category><![CDATA[Apuntes]]></category>
		<category><![CDATA[Ficheros]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://tectonilogia.com/?p=574</guid>
		<description><![CDATA[<p><img width="400" height="300" src="http://tectonilogia.com/wp-content/uploads/2013/04/CopyFiles.jpg" class="attachment-post-thumbnail wp-post-image" alt="Remote Copy, Delete, Rename Files" title="Remote Copy, Delete, Rename Files" /></p>Interaccionar con los ficheros de otro pc utilizando las credeciales de usuario y password. Código de ejemplo para conectarse a un servidor mediante login para poder copiar, borrar o renombrar ficheros de forma remota.

Para poder acceder a los ficheros de otro pc que esta protegido con usuario y contraseña, necesitamos utilizar la librería "advapi32.dll", la cual se conecta al servidor utilizando el método "LogoUser". Una vez estamos conectados nos devuelve por referencia un manejador del usuario indicado <em>A pointer to a handle variable that receives a handle to a token that represents the specified user.</em> <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aaMSDN LogonUser Method"title="MSDN LogonUser Method">MSDN</a>. Una vez tenemos el manejador del usuario, ya podemos inicializar una nueva instancia de la clase WindowsIdentity con este usuario. Así cuando accedamos a los ficheros no nos dará error de acceso denegado ni nada parecido, porque estaremos utilizando la cuenta de windows especificada anteriormente.

A continuación, un posible ejemplo del código que nos puede interesar.
<span id="more-574"></span>
<pre><code>public class ServerSystem
{
	public string User { get; set; }
	public string Domain { get; set; }
	public string Pwd { get; set; }
	public string Ip { get; set; }
}

[System.Runtime.InteropServices.DllImport(&quot;advapi32.dll&quot;, SetLastError = true)]
private static extern bool LogonUser(
	string lpszUsername,
	string lpszDomain,
	string lpszPassword,
	int dwLogonType,
	int dwLogonProvider,
	out IntPtr phToken
);

public static WindowsImpersonationContext ConnectWindowsImpersonation(ServerSystem logon)
{
	WindowsIdentity wid_current = WindowsIdentity.GetCurrent();
	WindowsIdentity wid_admin = null;
	WindowsImpersonationContext wic = null;

	IntPtr admin_token;
	//9 = (int)LogonType.LOGON32_LOGON_NEW_CREDENTIALS
	//0 = (int)LogonProvider.LOGON32_PROVIDER_DEFAULT
	if (!LogonUser(logon.User, logon.Domain, logon.Pwd, 9, 0, out admin_token))
	{
		throw new Exception(String.Format(&quot;LogonUser Failed {0}{1}{2}&quot;, logon.User, logon.Domain, logon.Pwd));
	}

	wid_admin = new System.Security.Principal.WindowsIdentity(admin_token);
	wic = wid_admin.Impersonate();

	return wic;
}

public static void CloseWindowsImpersonation(WindowsImpersonationContext wic)
{
	if (wic != null)
	{
		wic.Undo();
	}
}</code></pre>

Código de uso de los métodos anteriores.

<pre><code>ServerSystem serverDefinition = new ServerSystem();
serverDefinition.User = &quot;&quot;; //Login
serverDefinition.Domain = &quot;&quot;; //Server Domain o Machine Name
serverDefinition.Pwd = &quot;&quot;; //Password Login
serverDefinition.Ip = &quot;&quot;; 

WindowsImpersonationContext wic = ConnectWindowsImpersonation(serverDefinition);
try
{   
	//ToDo: Hacer algo con los ficheros
}
catch (Exception ex)
{
	if (logger.IsErrorEnabled) logger.Error(ex.ToString());
}
finally
{
	CloseWindowsImpersonation(wic);
}</code></pre>]]></description>
			<content:encoded><![CDATA[<p><img width="400" height="300" src="http://tectonilogia.com/wp-content/uploads/2013/04/CopyFiles.jpg" class="attachment-post-thumbnail wp-post-image" alt="Remote Copy, Delete, Rename Files" title="Remote Copy, Delete, Rename Files" /></p>Interaccionar con los ficheros de otro pc utilizando las credeciales de usuario y password. Código de ejemplo para conectarse a un servidor mediante login para poder copiar, borrar o renombrar ficheros de forma remota.

Para poder acceder a los ficheros de otro pc que esta protegido con usuario y contraseña, necesitamos utilizar la librería "advapi32.dll", la cual se conecta al servidor utilizando el método "LogoUser". Una vez estamos conectados nos devuelve por referencia un manejador del usuario indicado <em>A pointer to a handle variable that receives a handle to a token that represents the specified user.</em> <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aaMSDN LogonUser Method"title="MSDN LogonUser Method">MSDN</a>. Una vez tenemos el manejador del usuario, ya podemos inicializar una nueva instancia de la clase WindowsIdentity con este usuario. Así cuando accedamos a los ficheros no nos dará error de acceso denegado ni nada parecido, porque estaremos utilizando la cuenta de windows especificada anteriormente.

A continuación, un posible ejemplo del código que nos puede interesar.
<span id="more-574"></span>
<pre><code>public class ServerSystem
{
	public string User { get; set; }
	public string Domain { get; set; }
	public string Pwd { get; set; }
	public string Ip { get; set; }
}

[System.Runtime.InteropServices.DllImport(&quot;advapi32.dll&quot;, SetLastError = true)]
private static extern bool LogonUser(
	string lpszUsername,
	string lpszDomain,
	string lpszPassword,
	int dwLogonType,
	int dwLogonProvider,
	out IntPtr phToken
);

public static WindowsImpersonationContext ConnectWindowsImpersonation(ServerSystem logon)
{
	WindowsIdentity wid_current = WindowsIdentity.GetCurrent();
	WindowsIdentity wid_admin = null;
	WindowsImpersonationContext wic = null;

	IntPtr admin_token;
	//9 = (int)LogonType.LOGON32_LOGON_NEW_CREDENTIALS
	//0 = (int)LogonProvider.LOGON32_PROVIDER_DEFAULT
	if (!LogonUser(logon.User, logon.Domain, logon.Pwd, 9, 0, out admin_token))
	{
		throw new Exception(String.Format(&quot;LogonUser Failed {0}{1}{2}&quot;, logon.User, logon.Domain, logon.Pwd));
	}

	wid_admin = new System.Security.Principal.WindowsIdentity(admin_token);
	wic = wid_admin.Impersonate();

	return wic;
}

public static void CloseWindowsImpersonation(WindowsImpersonationContext wic)
{
	if (wic != null)
	{
		wic.Undo();
	}
}</code></pre>

Código de uso de los métodos anteriores.

<pre><code>ServerSystem serverDefinition = new ServerSystem();
serverDefinition.User = &quot;&quot;; //Login
serverDefinition.Domain = &quot;&quot;; //Server Domain o Machine Name
serverDefinition.Pwd = &quot;&quot;; //Password Login
serverDefinition.Ip = &quot;&quot;; 

WindowsImpersonationContext wic = ConnectWindowsImpersonation(serverDefinition);
try
{   
	//ToDo: Hacer algo con los ficheros
}
catch (Exception ex)
{
	if (logger.IsErrorEnabled) logger.Error(ex.ToString());
}
finally
{
	CloseWindowsImpersonation(wic);
}</code></pre>]]></content:encoded>
			<wfw:commentRss>http://tectonilogia.com/acceso-a-ficheros-mediante-credenciales-de-forma-remota/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reminder: Group/Ungroup y Lista de Valores en Excel</title>
		<link>http://tectonilogia.com/reminder-groupungroup-y-lista-de-valores-en-excel/</link>
		<comments>http://tectonilogia.com/reminder-groupungroup-y-lista-de-valores-en-excel/#comments</comments>
		<pubDate>Mon, 04 Jun 2012 20:04:23 +0000</pubDate>
		<dc:creator>tecnico</dc:creator>
				<category><![CDATA[Ayuda Técnica]]></category>
		<category><![CDATA[Programas]]></category>
		<category><![CDATA[Apuntes]]></category>
		<category><![CDATA[Excel]]></category>

		<guid isPermaLink="false">http://tectonilogia.com/?p=569</guid>
		<description><![CDATA[<p><img width="150" height="150" src="http://tectonilogia.com/wp-content/uploads/2012/06/reminder-excel1.jpg" class="attachment-post-thumbnail wp-post-image" alt="reminder-excel" title="reminder-excel" /></p><strong>Como Agrupar filas y como poner varios valores seleccionables tipo ComboBox en una celda del excel</strong>. Consiste en agrupar filas para que aparezca el simbolo +/- para plegar o desplegar, tipo "collapsable" o "accordion". Por otro lado consiste en configurar celdas como ComboBox con una lista de valores. El siguiente paso (opcional) esta en configurar el formato de las celdas en función de un texto concreto.

Es una operación que hemos repetido varias veces, sabemos que existe, pero nunca nos acordamos de como volverlo hacer. Así que escribo el recordatorio de como Agrupar filas, y como generar lista de valores para utilizar en celdas concretas.
<span id="more-569"></span>
<h3>Agrupar es</h3>
<ul>
<li>Seleccionar todas las filas que queremos agrupar, menos la primera. La que queremos que se muestre cuando tengamos los datos "colapsados"</li>
<li>"Data - Group and Outline - Group"</li>
<li>Por defecto aparece el "+/-" abajo. </li>
<li>Si queremos que el "+/-" de la agrupación se ponga arriba.
<ul>
<li>Seleccionamos las celdas, "Data - Group and Outline - Settings"</li>
<li>Desmarcamos "Summary rows below detail"</li>
</ul>
</li>
</ul>

<h3>Combox en Celda</h3>
En una Hoja/Sheet, escribir todos los valores tipo lista que queremos que tenga el Seleccionable de la celda.
Ej.Lista con dos valores, Ok y KO
<a href="http://tectonilogia.com/wp-content/uploads/2012/06/ExcelComboBox.png"><img src="http://tectonilogia.com/wp-content/uploads/2012/06/ExcelComboBox.png" alt="" title="ExcelComboBox" width="219" height="189" class="aligncenter size-full wp-image-571" /></a>
<ul>
<li>Seleccionamos la celdas con los datos introducidos</li>
<li>En la parte superior izquierda escribimos el nombre que le damos a la lista.</li>
</ul>
Si posteriormente queremos modificar los datos, valores o eliminar la lista, tenemos que ir a 
<ul>
<li>Insert - Name - Define</li>
</ul>

<h3>Formato Condicional</h3>
Si queremos que una celda,fila, tenga un formato diferente al estandard en función de una condición, podemos:

<ul>
<li>Format - Conditional Formatting</li>
<li>Seleccionamos "Formula Is" y escribimos '=$G24="OK" ' donde 'G' es la columna donde puede contener el valor OK o KO (Por ejemplo)</li>
</ul>]]></description>
			<content:encoded><![CDATA[<p><img width="150" height="150" src="http://tectonilogia.com/wp-content/uploads/2012/06/reminder-excel1.jpg" class="attachment-post-thumbnail wp-post-image" alt="reminder-excel" title="reminder-excel" /></p><strong>Como Agrupar filas y como poner varios valores seleccionables tipo ComboBox en una celda del excel</strong>. Consiste en agrupar filas para que aparezca el simbolo +/- para plegar o desplegar, tipo "collapsable" o "accordion". Por otro lado consiste en configurar celdas como ComboBox con una lista de valores. El siguiente paso (opcional) esta en configurar el formato de las celdas en función de un texto concreto.

Es una operación que hemos repetido varias veces, sabemos que existe, pero nunca nos acordamos de como volverlo hacer. Así que escribo el recordatorio de como Agrupar filas, y como generar lista de valores para utilizar en celdas concretas.
<span id="more-569"></span>
<h3>Agrupar es</h3>
<ul>
<li>Seleccionar todas las filas que queremos agrupar, menos la primera. La que queremos que se muestre cuando tengamos los datos "colapsados"</li>
<li>"Data - Group and Outline - Group"</li>
<li>Por defecto aparece el "+/-" abajo. </li>
<li>Si queremos que el "+/-" de la agrupación se ponga arriba.
<ul>
<li>Seleccionamos las celdas, "Data - Group and Outline - Settings"</li>
<li>Desmarcamos "Summary rows below detail"</li>
</ul>
</li>
</ul>

<h3>Combox en Celda</h3>
En una Hoja/Sheet, escribir todos los valores tipo lista que queremos que tenga el Seleccionable de la celda.
Ej.Lista con dos valores, Ok y KO
<a href="http://tectonilogia.com/wp-content/uploads/2012/06/ExcelComboBox.png"><img src="http://tectonilogia.com/wp-content/uploads/2012/06/ExcelComboBox.png" alt="" title="ExcelComboBox" width="219" height="189" class="aligncenter size-full wp-image-571" /></a>
<ul>
<li>Seleccionamos la celdas con los datos introducidos</li>
<li>En la parte superior izquierda escribimos el nombre que le damos a la lista.</li>
</ul>
Si posteriormente queremos modificar los datos, valores o eliminar la lista, tenemos que ir a 
<ul>
<li>Insert - Name - Define</li>
</ul>

<h3>Formato Condicional</h3>
Si queremos que una celda,fila, tenga un formato diferente al estandard en función de una condición, podemos:

<ul>
<li>Format - Conditional Formatting</li>
<li>Seleccionamos "Formula Is" y escribimos '=$G24="OK" ' donde 'G' es la columna donde puede contener el valor OK o KO (Por ejemplo)</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://tectonilogia.com/reminder-groupungroup-y-lista-de-valores-en-excel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Explicación UTF-8 Encoding y porque el XmlDocument da problemas</title>
		<link>http://tectonilogia.com/explicacion-utf-8-encoding-y-porque-el-xmldocument-da-problemas/</link>
		<comments>http://tectonilogia.com/explicacion-utf-8-encoding-y-porque-el-xmldocument-da-problemas/#comments</comments>
		<pubDate>Thu, 24 May 2012 00:50:44 +0000</pubDate>
		<dc:creator>tecnico</dc:creator>
				<category><![CDATA[.Net C#]]></category>
		<category><![CDATA[Ayuda Técnica]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Programas]]></category>
		<category><![CDATA[Encoding]]></category>
		<category><![CDATA[UTF8]]></category>
		<category><![CDATA[Xml]]></category>

		<guid isPermaLink="false">http://tectonilogia.com/?p=567</guid>
		<description><![CDATA[<p><img width="208" height="128" src="http://tectonilogia.com/wp-content/uploads/2012/05/utf8-bom-byte-order-mark.jpg" class="attachment-post-thumbnail wp-post-image" alt="utf8 bom byte order mark" title="utf8 bom byte order mark" /></p>La <a href="http://es.wikipedia.org/wiki/UTF-8" target="_blank" title="UTF 8 wikipedia">codificación UTF-8</a> es una de las más utilizadas para representar cualquier carácter Unicode. La codificación usa símbolos de longitud variable (de 1 a 4 bytes por carácter unicode). Es decir, que 1 carcater unicode puede ocupar hasta 4 bytes, cuando en ascii 1 caracter es 1 byte.  

Una forma de identificar que el texto esta <strong>codificado en UTF-8</strong> es con el <strong>BOM Byte Order Mark</strong>, que son una serie de 3 bytes concretos. Útil por ejemplo en el envio de texto por stream. 
<pre><code>un carácter 0xFEFF, codificado en UTF-8 como 0xEF,0xBB,0xBF o 239 187 191</code></pre> 
<span id="more-567"></span>
Resumiendo, si al principio del texto vienen estos bytes significa que la codificación es UTF-8, de esta forma el receptor puede identificarlo y tratar el texto con el "Encoding" correcto. El problema es que el BOM es opcional en la definición UTF-8 y no siempre es soportado por el software que debe leer texto UTF8. Por ejemplo en PHP puede causar problemas, algunos programas de Microsoft lo incorporan automáticamente y otros no lo soportan, en conclusión hay que tener cuidado con su uso y asegurarse que el receptor sabe interpretarlo correctamente.

Más información en <a href="http://en.wikipedia.org/wiki/Byte_order_mark" target="_blank" title="BOM UTF-8 Encoding Wikipedia">BOM Byte Order Mark</a>.

<h3>XmlDocument desde .Net</h3>
La clase <strong>XmlDocument</strong> no soporta cargar un Xml con el BOM incorporado, dará error. Si os fijais, veremos en un String con un Xml en UTF8 y el BOM que los 3 primeros bytes son 239 187 191.
La forma de poder cargar un XML con BOM utilizando la clase XmlDocument es utilizar la clase <a href="http://msdn.microsoft.com/en-us/library/s064f8w2.aspx" target="_blank" title="UTF8Encoding">UTF8Encoding</a>

De alguna forma crear una clase UTF8 sin BOM y convertirlo, 
<pre><code>String utf8WithoutBom = new System.Text.UTF8Encoding(False);</code></pre>
O Crear una clase con BOM y utilizar el método "GetPreamble" para saber si el texto lo contiene y en tal caso eliminarlo.
<pre><code>UTF8Encoding utf8WithBom = new System.Text.UTF8Encoding(true);
string byteOrderMarkUtf8 = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble());
if (xml.StartsWith(byteOrderMarkUtf8))
{
	xml = xml.Remove(0, byteOrderMarkUtf8.Length);
}</pre></code>

Las claves están aquí, sólo hay que encontrar como utilizarlas correctamente.
]]></description>
			<content:encoded><![CDATA[<p><img width="208" height="128" src="http://tectonilogia.com/wp-content/uploads/2012/05/utf8-bom-byte-order-mark.jpg" class="attachment-post-thumbnail wp-post-image" alt="utf8 bom byte order mark" title="utf8 bom byte order mark" /></p>La <a href="http://es.wikipedia.org/wiki/UTF-8" target="_blank" title="UTF 8 wikipedia">codificación UTF-8</a> es una de las más utilizadas para representar cualquier carácter Unicode. La codificación usa símbolos de longitud variable (de 1 a 4 bytes por carácter unicode). Es decir, que 1 carcater unicode puede ocupar hasta 4 bytes, cuando en ascii 1 caracter es 1 byte.  

Una forma de identificar que el texto esta <strong>codificado en UTF-8</strong> es con el <strong>BOM Byte Order Mark</strong>, que son una serie de 3 bytes concretos. Útil por ejemplo en el envio de texto por stream. 
<pre><code>un carácter 0xFEFF, codificado en UTF-8 como 0xEF,0xBB,0xBF o 239 187 191</code></pre> 
<span id="more-567"></span>
Resumiendo, si al principio del texto vienen estos bytes significa que la codificación es UTF-8, de esta forma el receptor puede identificarlo y tratar el texto con el "Encoding" correcto. El problema es que el BOM es opcional en la definición UTF-8 y no siempre es soportado por el software que debe leer texto UTF8. Por ejemplo en PHP puede causar problemas, algunos programas de Microsoft lo incorporan automáticamente y otros no lo soportan, en conclusión hay que tener cuidado con su uso y asegurarse que el receptor sabe interpretarlo correctamente.

Más información en <a href="http://en.wikipedia.org/wiki/Byte_order_mark" target="_blank" title="BOM UTF-8 Encoding Wikipedia">BOM Byte Order Mark</a>.

<h3>XmlDocument desde .Net</h3>
La clase <strong>XmlDocument</strong> no soporta cargar un Xml con el BOM incorporado, dará error. Si os fijais, veremos en un String con un Xml en UTF8 y el BOM que los 3 primeros bytes son 239 187 191.
La forma de poder cargar un XML con BOM utilizando la clase XmlDocument es utilizar la clase <a href="http://msdn.microsoft.com/en-us/library/s064f8w2.aspx" target="_blank" title="UTF8Encoding">UTF8Encoding</a>

De alguna forma crear una clase UTF8 sin BOM y convertirlo, 
<pre><code>String utf8WithoutBom = new System.Text.UTF8Encoding(False);</code></pre>
O Crear una clase con BOM y utilizar el método "GetPreamble" para saber si el texto lo contiene y en tal caso eliminarlo.
<pre><code>UTF8Encoding utf8WithBom = new System.Text.UTF8Encoding(true);
string byteOrderMarkUtf8 = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble());
if (xml.StartsWith(byteOrderMarkUtf8))
{
	xml = xml.Remove(0, byteOrderMarkUtf8.Length);
}</pre></code>

Las claves están aquí, sólo hay que encontrar como utilizarlas correctamente.
]]></content:encoded>
			<wfw:commentRss>http://tectonilogia.com/explicacion-utf-8-encoding-y-porque-el-xmldocument-da-problemas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tip: Remove Install ePo Agent McAfee</title>
		<link>http://tectonilogia.com/tip-remove-install-epo-agent-mcafee/</link>
		<comments>http://tectonilogia.com/tip-remove-install-epo-agent-mcafee/#comments</comments>
		<pubDate>Tue, 22 May 2012 13:40:08 +0000</pubDate>
		<dc:creator>tecnico</dc:creator>
				<category><![CDATA[Antivirus]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Sistemas]]></category>
		<category><![CDATA[Apuntes]]></category>
		<category><![CDATA[ePo agent]]></category>
		<category><![CDATA[McAfee]]></category>

		<guid isPermaLink="false">http://tectonilogia.com/?p=565</guid>
		<description><![CDATA[<p><img width="419" height="419" src="http://tectonilogia.com/wp-content/uploads/2012/05/epo-agent-mcafee.gif" class="attachment-post-thumbnail wp-post-image" alt="epo agent mcafee" title="epo agent mcafee" /></p>El proceso <strong>ePo Agent de McAfee</strong> es el encargado de revisar las políticas de seguridad del antivirus instalado en diferentes máquinas (McAfee). Esta herramienta permite administrar la seguridad y las políticas de diferentes equipos, haciendo que se cumplan las reglas configuradas. En otras palabras, si un usuario desconfigura el McAfee, esta herramienta restaura la configuración que ha diseñado el responsable de seguridad.

Lo malo es, que en ocasiones la configuración que pueda ser correcta para unos usuarios, puede ser un gran "dolor de cabeza" para otros. Porque un antivirus mal configurado es peor que un virus. Por este motivo, como medida temporal, curiosidad, o por algún motivo concreto, se puede <strong>eliminar el proceso ePo agent de Mcfee</strong> para que no restaure la configuración. Esto no siempre funciona, porque normalmente una de las tareas del servidor es revisar que el "agent" este en ejecución y sino es así lo levanta.

<h3>Como eliminar el Agent (si se puede)</h3>
<span id="more-565"></span>
Ejecutando el comando "frminst /remove=agent" de la siguiente forma, situamos en la carpeta ponemos:
<pre><code>C:\Archivos de programa\McAfee\Common Framework&gt;frminst /remove=agent
C:\Archivos de programa\McAfee\Common Framework&gt;</code></pre>

Más información en la <a href="https://community.mcafee.com/thread/8350" target="_blank" title="community mcafee">comunidad mcafee</a>
]]></description>
			<content:encoded><![CDATA[<p><img width="419" height="419" src="http://tectonilogia.com/wp-content/uploads/2012/05/epo-agent-mcafee.gif" class="attachment-post-thumbnail wp-post-image" alt="epo agent mcafee" title="epo agent mcafee" /></p>El proceso <strong>ePo Agent de McAfee</strong> es el encargado de revisar las políticas de seguridad del antivirus instalado en diferentes máquinas (McAfee). Esta herramienta permite administrar la seguridad y las políticas de diferentes equipos, haciendo que se cumplan las reglas configuradas. En otras palabras, si un usuario desconfigura el McAfee, esta herramienta restaura la configuración que ha diseñado el responsable de seguridad.

Lo malo es, que en ocasiones la configuración que pueda ser correcta para unos usuarios, puede ser un gran "dolor de cabeza" para otros. Porque un antivirus mal configurado es peor que un virus. Por este motivo, como medida temporal, curiosidad, o por algún motivo concreto, se puede <strong>eliminar el proceso ePo agent de Mcfee</strong> para que no restaure la configuración. Esto no siempre funciona, porque normalmente una de las tareas del servidor es revisar que el "agent" este en ejecución y sino es así lo levanta.

<h3>Como eliminar el Agent (si se puede)</h3>
<span id="more-565"></span>
Ejecutando el comando "frminst /remove=agent" de la siguiente forma, situamos en la carpeta ponemos:
<pre><code>C:\Archivos de programa\McAfee\Common Framework&gt;frminst /remove=agent
C:\Archivos de programa\McAfee\Common Framework&gt;</code></pre>

Más información en la <a href="https://community.mcafee.com/thread/8350" target="_blank" title="community mcafee">comunidad mcafee</a>
]]></content:encoded>
			<wfw:commentRss>http://tectonilogia.com/tip-remove-install-epo-agent-mcafee/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tip: Como Ampliar/Extender Disco en Windows XP SP3</title>
		<link>http://tectonilogia.com/tip-como-ampliarextender-disco-en-windows-xp-sp3/</link>
		<comments>http://tectonilogia.com/tip-como-ampliarextender-disco-en-windows-xp-sp3/#comments</comments>
		<pubDate>Thu, 10 May 2012 07:23:51 +0000</pubDate>
		<dc:creator>tecnico</dc:creator>
				<category><![CDATA[Ayuda Técnica]]></category>
		<category><![CDATA[Sistemas]]></category>
		<category><![CDATA[Diskpart]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://tectonilogia.com/?p=563</guid>
		<description><![CDATA[<p><img width="300" height="289" src="http://tectonilogia.com/wp-content/uploads/2012/05/harddisktools.jpg" class="attachment-post-thumbnail wp-post-image" alt="harddisktools" title="harddisktools" /></p><strong>Como ampliar o extender el disco o partición en un Windows XP</strong>. En ocasiones necesitamos ampliar el disco de una <strong>máquina virtual (virtual machine)</strong> o ampliar el espacio de una partición del disco. Para poder hacerlo necesitamos "espacio no utilizado". Esto se consigue si existe espacio no asignado a ninguna partición y no esta formateado. <em>(creo, no soy de sistemas)</em>.

Desde una máquina virtual con VMWare es sencillo ampliar el espacio del disco: "VMWare: Settings - seleccionar Hard Disc - Utilities - Extend." El problema con windows xp, es que no autodectecta que el disco ha crecido. El nuevo espacio asignado no lo reconoce, por lo que hay que indicarle al sistema que el disco a crecido y que lo extienda.

<h3>Posible Solución</h3>
<span id="more-563"></span>
A través del comando <strong>diskpart</strong> tal como nos dice la <a href="http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/dm_extend_basic_volume.mspx?mfr=true" title="diskpart extender disco" target="_blank">MSDN</a>
Los pasos a seguir tipo resumen es:
<ul>
<li>Abrir una consola en línea de comandos (Ejecutar: cmd)</li>
<li>Escribir <em>diskpart</em>. Para entendernos, entra en "modo" DISKPART</li>
<li>Escribir <em>list volume</em>. Mostrará un listado de los discos, y tenemos que apuntar el que nos interesa.</li>
<li>Escribir <em>select volume n</em>. Donde n es el número del disco</li>
<li>Escribir <em>extend</em>. Como opción podemos poner extend n (n=Mb)</li>
</ul>

La prueba que realicé me funcionó correctamente. Menos mal que tenemos a la MSDN.
]]></description>
			<content:encoded><![CDATA[<p><img width="300" height="289" src="http://tectonilogia.com/wp-content/uploads/2012/05/harddisktools.jpg" class="attachment-post-thumbnail wp-post-image" alt="harddisktools" title="harddisktools" /></p><strong>Como ampliar o extender el disco o partición en un Windows XP</strong>. En ocasiones necesitamos ampliar el disco de una <strong>máquina virtual (virtual machine)</strong> o ampliar el espacio de una partición del disco. Para poder hacerlo necesitamos "espacio no utilizado". Esto se consigue si existe espacio no asignado a ninguna partición y no esta formateado. <em>(creo, no soy de sistemas)</em>.

Desde una máquina virtual con VMWare es sencillo ampliar el espacio del disco: "VMWare: Settings - seleccionar Hard Disc - Utilities - Extend." El problema con windows xp, es que no autodectecta que el disco ha crecido. El nuevo espacio asignado no lo reconoce, por lo que hay que indicarle al sistema que el disco a crecido y que lo extienda.

<h3>Posible Solución</h3>
<span id="more-563"></span>
A través del comando <strong>diskpart</strong> tal como nos dice la <a href="http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/dm_extend_basic_volume.mspx?mfr=true" title="diskpart extender disco" target="_blank">MSDN</a>
Los pasos a seguir tipo resumen es:
<ul>
<li>Abrir una consola en línea de comandos (Ejecutar: cmd)</li>
<li>Escribir <em>diskpart</em>. Para entendernos, entra en "modo" DISKPART</li>
<li>Escribir <em>list volume</em>. Mostrará un listado de los discos, y tenemos que apuntar el que nos interesa.</li>
<li>Escribir <em>select volume n</em>. Donde n es el número del disco</li>
<li>Escribir <em>extend</em>. Como opción podemos poner extend n (n=Mb)</li>
</ul>

La prueba que realicé me funcionó correctamente. Menos mal que tenemos a la MSDN.
]]></content:encoded>
			<wfw:commentRss>http://tectonilogia.com/tip-como-ampliarextender-disco-en-windows-xp-sp3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>La importancia de la Comunicación</title>
		<link>http://tectonilogia.com/la-importancia-de-la-comunicacion/</link>
		<comments>http://tectonilogia.com/la-importancia-de-la-comunicacion/#comments</comments>
		<pubDate>Wed, 09 May 2012 10:43:24 +0000</pubDate>
		<dc:creator>tecnico</dc:creator>
				<category><![CDATA[OffTopic]]></category>

		<guid isPermaLink="false">http://tectonilogia.com/?p=561</guid>
		<description><![CDATA[Si tengo claro el concepto o requerimiento, la intención del desarrollo será el correcto. De esta forma el resultado será el esperado. Si no lo entiendo correctamente, la intención del desarrollo será incorrecto, y los resultados no serán los esperados.]]></description>
			<content:encoded><![CDATA[<p>Si tengo claro el concepto o requerimiento, la intención del desarrollo será el correcto. De esta forma el resultado será el esperado. Si no lo entiendo correctamente, la intención del desarrollo será incorrecto, y los resultados no serán los esperados. </p>
]]></content:encoded>
			<wfw:commentRss>http://tectonilogia.com/la-importancia-de-la-comunicacion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	<media:rating>nonadult</media:rating></channel>
</rss><!-- Dynamic page generated in 1.173 seconds. --><!-- Cached page generated by WP-Super-Cache on 2013-05-24 01:29:56 --><!-- Compression = gzip -->
