jueves, 24 de julio de 2014

Instalar NET Framework 3.5 en Windows 8.1 Update 1 OffLine o sin Conexión

Antes que nada, esto esta probado en un sistema de 32 bits (x86), no se si funcionara en uno de 64 bits, si a alguien le funciono le pido que lo comente.

Solo necesitamos el DVD de instalacion de Windows

Este método funciona en Windows 8.1 (todas las versiones) - windows 8 (todas las versiones)


Montar la imagen ISO o insertar el DVD de Windows 8. El origen de esta característica puede encontrarse en la carpeta E:\sources\sxs. (En este caso, F: letra del quemador o lector de dvd donde se encuentra el dvd de instalación)

Abra CMD.EXE con privilegios administrativos (presiona la tecla de windows, escribe directamente cmd, aparecera un cuadradito negrito "Símbolo del sistema", clic derecho, selecciona ejecutar como administrador)

Ejecuta el siguiente comando
Dism.exe /online /enable-feature /featurename:NetFX3 /All /Source:E:\sources\sxs /LimitAccess
, y presiona ENTRAR.


Ups..... ERROR... solo llego al 65.8%

Contaba con que no pasara esto, pero nada esta libre de errores.

Según dicen por ahí de tanto buscar info, que esta operación debe realizarse cuando Windows todavía NO esta activado (haberlo dicho antes...., y ahora como desinstalo el activador?).


Existe otra forma que si me funciono.

Insertamos el disco de Windows o montamos la imagen ISO.
Seguidamente creamos una carpeta en el disco C: con el nombre de “net35″.
Ahora ejecutamos el CMD (como administrador) y escribimos
xcopy F:\sources\sxs\*.* c:\net35 /s (F es la unidad del DVD de instalación de Windows)
Lo que hará será copiar toda la información a la carpeta ya creada.
Finalmente ponemos este comando:
Dism.exe /online /enable-feature /featurename:NetFX3 /All /Source:c:\net35 /LimitAccess

Ya esta.... 100%

Suerte.

jueves, 6 de febrero de 2014

GIF animado en WPF (animación continua)

Hace tiempo que quería colocar una especie de espera mientras se carguen los datos del servidor, se me ocurrió varias cosas, pero con el fin de optimizar la velocidad y no consumir recursos al final decidí colocar una especie de manto negro semitransparente que inhabilitara los demás controles con un simple gif animado que dijera "Cargando....".

Parecía fácil, pero no fue tanto así, por ahí googleando encontré 2 soluciones referenciar Windows Forms con un PictureBox, que no es lo mio mezclar WinForms con Ventanas WPF, y lo otro utilizar un control WPF llamado MediaElement que parecia lo mas coherente:

<MediaElement LoadedBehavior="Play" Source="file://C:/anim.gif" />

Problema: Solo reproduce 1 vez el gif animado y luego se detiene.

Seguí navegando por ahí y encontré código adicional, que permite un loop infinito en MediaElement, pero solo sirve para vídeos o sonido y no aplica a gif animados.

De tanto buscar y no encontrar, no podía creer que ha nadie le haía pasado esto antes, al final estaba decidido a crear un control nativo wpf que permita resolver este problema, pero encontré la solución ya que algún lunatico había inventado la rueda antes que yo (gracias por ahorrarme gastar mi teclado).

Descarga de esta pagina http://wpfanimatedgif.codeplex.com/releases una demo de como funciona, incluye una dll (el momento de escribir esta la versión estable es la 1.4.4) que sirve para agregar a tus proyectos.

Agrega una referencia en tu proyecto a esta DLL y modifica es esta manera tu xaml, mejor te dejo una captura.


y vuala, ya tienes un GIF animado continuo.



miércoles, 8 de enero de 2014

Variables Globales o Publicas en C#

Si vienes de Visual Basic, te habrás dado cuenta que en C# no existe módulos donde generalmente se creaban las variables globales.

Para tener variables globales en C#, crea una clase dentro de tu proyecto y nombrala "Globales", dentro de la clase escribe "public static string variableGlobal1;", listo.... ya tienes tu variable global.

Mas o menos deberia quedarte así:

namespace Demo
{
    static class Globales
    {
        public static string variableGlobal1;
    }
}


Para hacer referencia a la variable de cualquier lugar:

Asignando valor:

Globales.variableGlobal1 = "Valor Demo";

Obtener valor de la variable

String cadena = Globales.variableGlobal1;

Un byte mas de sabiduría en tu cabeza.

Saludos....