viernes, octubre 19, 2007

Tip Web Server ClickOnce Configuration

Pasar nuestra aplicación de desarrollo a producción puede ser un proceso arduo y engorroso si no se realiza la configuración adecuada en el servidor web de publicación, un punto importante es agregar las extensiones de archivos necesarias en los MIME Content Type del sitio web, esto permite realizar la instalación y actualización de la aplicación sin problemas. Las extesiones que deben agregarse son las siguientes:

File Extension - MIME Content Type Mapping
.application application/x-ms-application
.manifest application/x-ms-application
.deploy application/octet-stream

Pdt1: No es necesario instalar el runtime del .net framework 2.0 en el servidor de publicación

Pdt2: En este sitio encuentran la forma de configurar las extensiones para los MIME Content Type:
http://support.microsoft.com/default.aspx?scid=kb;en-us;326965

miércoles, octubre 10, 2007

DDay.Update

Muchas personas no gustan de la forma en cómo ClickOnce presenta al usuario los formularios de instalación de su aplicación, algunos preferirían que fueran más personalizados o en su defecto solo usar sus funcionalidades de actualización y dejar la parte de la instalación a aplicaciones más sofisticadas y especializadas en esto como es el caso de InstallShield o de los proyectos de instalación de Visual Studio. Hace unas semanas en uno de los proyectos fue necesario aplicar este caso, donde solo era necesario utilizar el modelo de update de aplicaciones de ClickOnce y hacer la instalación con un proyecto InstallScript de InstallShield, para lo cual me fui muy útil la librería de clases de código abierto DDay.Update (http://www.ddaysoftware.com/Pages/Projects/DDay.Update/)

Vayan dándole una mirada y en mi siguiente post empezare un ejemplo práctico utilizando esta librería de clases

viernes, octubre 05, 2007

Registry Key

Es posible que una de las tareas que sea necesario realizar cuando se instala una aplicación es la de crear claves en el registro, para establecer ciertas caracteristicas de nuestra aplicación, aquí les dejo un fragmento de código que justamente crea una clave de registro si al comprobarla éta no existe.

private static void TestRegistryKey()
{
if (ApplicationDeployment.IsNetworkDeployed)
{
ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;
if (ad.IsFirstRun)
{
string keyPath = @"SOFTWARE\RegistryKeypProject\RegistryKey";
RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(keyPath, true);
if (registryKey != null)
{
if (registryKey.GetValue("RunOnce") != null)
{
string runOnce = registryKey.GetValue("RunOnce").ToString();
if (runOnce == "0")
{
// your code
}
}
else
{
registryKey.SetValue("RunOnce", "0");
// your code
registryKey.SetValue("RunOnce", "1");
}
}
}
}

viernes, agosto 31, 2007

Paths

Por alguna razón siempre olvido los métodos para optener el path de ejecución de mi aplicación, así que para quienes tienen un olvido similar, aquí hay un par de métodos que son muy útilies cuando se desea encontrar el path de repositorio de la aplicación del usuario actual:

string exePath = Application.ExecutablePath;

string iconPath = System.IO.Path.GetDirectoryName(exePath) + @"\App.ico";
string iconPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\App.ico";


// Gets the path for the application data of a local, non-roaming user.
System.Windows.Forms.Application.LocalUserAppDataPath

// The directory that serves as a common repository for application-specific data for the current roaming user
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

miércoles, agosto 15, 2007

ClickOnce Application Desktop Shortcut

En un post anterior explique como era la creación de un shortcut de un documento que hace parte del despliegue de una aplicación, estos dias he tenido que hacer algo similar pero con un shortcut que ejecuta la aplicación, para lo cual me he valido de este par de articulos:

VB: http://blog.ziffdavis.com/devlife/archive/2006/07/28/42695.aspx
C#: http://blog.scottschecter.net/TheZenOfTheClickOnceDeployedApplicationDesktopShortcut.aspx

Welcome to the Future of Deployment

Buscando información para algo que tengo que hacer en un proyecto me encontré con un artículo bastante completo acerca de ClickOnce en http://www.code-magazine.com/article.aspx?quickid=0703072&page=1, contiene una breve introducción, y trata temas como: crear un proyecto en VS, publicación de archivos, actualización de aplicaciones, propiedades de las publicaciones y el bootstrapper

lunes, agosto 13, 2007

A Developers Guide to Deploying Windows Forms Applications

Quiero invitarlos a leer uno de los mejores libros sino el mejor libro acerca de Deploy de aplicaciones con ClickOnce, esta escrito por Brian Noyes una de las autoridades en la materia:
http://www.softinsight.com/ClickOnceBook/

miércoles, junio 27, 2007

Windows Installer Development Tools

Cuando de instaladores se trata es necesario conocer a fondo su funcionamiento y en muchas ocasiones tener las herramientas adecuadas para poder realizar tareas específicas, así que den una mirada a este link, de seguro les será de utilidad:
http://msdn2.microsoft.com/En-US/library/aa372834.aspx

martes, mayo 29, 2007

Bug Restoring an Analysis Services Database

No se exactamente como llamar a la situación por la cual hago este post, sucede que llevaba ya un par de dias tratando de restaurar una base de datos de Analisys Services, lo cual funcionaba en unos equipos y en otros no, di miles de vueltas hasta que encontre el problema, este se debía a la ruta donde se encontraba el CAB con el backup de la bd, me explico: el nombre del folder donde estaba el archivo de backup contenía un caracter punto (.) por lo que cuando hacia uso del comando msmdarch para restaurar la bd, esta no era restaurada; miren el ejemplo:

"C:\Program Files\Microsoft Analysis Services\Bin\msmdarch.exe" /r server "C:\Program Files\Microsoft Analysis Services\Data" "D\:Backup1.0\BDBackup.CAB"

Cuando elimine el punto del nombre del folder donde se encuentra el backup ya fue posible restaurar la bd

"C:\Program Files\Microsoft Analysis Services\Bin\msmdarch.exe" /r server "C:\Program Files\Microsoft Analysis Services\Data" "D\:Backup1_0\BDBackup.CAB"

Asi que bueno dejo a su opinion si es un bug o no, pero algo si es seguro hay que tener cuidado con el nombre del folder donde se encuentre el backup.

miércoles, mayo 16, 2007

ClickOnce Shortcuts

El día de ayer revisando uno de los newsgroup de msdn me encontré con una pregunta bastante interesante y fue tal la curiosidad que me dí a la tarea de resolverla, la pregunta era la siguiente:
I have some Word documents I deploy to my users via ClickOnce along with the application files. Unfortunately, I can find no way to put a shortcut in the Start Menu's Program group for the user to click (I can only show the application file and the website support shortcut). Could you please tell me how I could add a shortcut to the data file into the my program's Program group?

Así que con el propósito de solucionarla les comparto el siguiente ejemplo:

1. Empecemos por crear una nueva aplicación Windows en Visual Studio, para el ejemplo vamos a usar C# como lenguaje de programación.

Solution name: ShortcutClickOnce
Project name: ShortcutClickOnce
Form cs name: Shortcut
Form name: Shortcut
Form Text: Shortcut
Form Size: 300, 118
Form MaximizeBox: False

Ahora agregamos un boton a la forma ShortCut
Button name: btnCreateShortcut
Button text: Create Shortcut...
Button dock: Fill


2. Bien ahora si manos a la obra para resolver la pregunta, lo primero que necesitamos es construir un método que nos permita crear un shortcut, para lo cual haremos uso del COM Windows Script Host Object Model, así que es necesario adicionar la referencia a este COM

Una vez adicionada la referencia hacemos uso de esta agregando la directiva:
using IWshRuntimeLibrary; en el cs de la forma ShortCut.

3. Procedemos entonces a crear el método que nos permitirá crear el shortcut:

private void CreateShortcut(string shortcutPath, string shortcutName, string documentPath)
{
// Creando una nueva instancia de WshShell Class
WshShell wshShell = new WshShell();


// Creando el shortcut
IWshRuntimeLibrary.IWshShortcut shortCut;

// Seleccionando el path para el shortcut
shortCut = (IWshRuntimeLibrary.IWshShortcut)wshShell.CreateShortcut(shortcutPath);

// Agregando el path de donde apuntará el shortcut
shortCut.TargetPath = documentPath;

// Descripción para el shortcut
shortCut.Description = shortcutName;

// Guardando el shortcut
shortCut.Save();
}


4. Ahora creamos un nuevo documento de word con el contenido que ustedes deseen y los adicionamos al proyecto. Procedemos a cambiar las propiedades del documento:
Build Action: Content
Copy to Output Directory: Copy Always


5. Es necesario crear un método que sea el encargado de llamar al método CreateShortcut cuando se este realizando el proceso de deploy, para lo cual es haremos uso de la API de ClickOnce, asi que agregamos la directiva:
using System.Deployment.Application; en el cs de la forma ShortCut.

///
/// Este método verifica si la aplicación se ejecuta a través de ClickOnce y si es
/// la primera vez que se ejecuta en el cliente
/// Es necesario adicionar la referencia directiva using System.Deployment.Application
///

private bool CheckForShortcut()
{
// Verificando si el deploy se esta haciendo a través de la red con ClickOnce
if (ApplicationDeployment.IsNetworkDeployed)
{
// Creando una nueva instancia de la clase ApplicationDeployment
ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;

// Verificando si es la primera vez que la aplicación se ejecuta en el cliente
if (ad.IsFirstRun)
{
// Obteniendo el path del folder que contiene los data files de la aplicación
string dataFilePath = ad.DataDirectory;

// Verificando que el archivo Documento.doc exista en el folder de los data files de la aplicación
if (System.IO.File.Exists(dataFilePath + @"Documento.doc"))
{
MessageBox.Show("Creating shortcut...");

// Path donde se creará el shortcut
string shortcutPath = string.Concat(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), @"\Documento.lnk");

// Nombre del shortcut
string shortcutName = "Documento.doc";

// Target path del shortcut
string documentPath = string.Concat(dataFilePath, @"\Documento.doc");

// Llamando al método que crea el shortcut
CreateShortcut(shortcutPath, shortcutName, documentPath);

return true;
}
}
}
return false;
}

Ahora creamos el método que responderá al manejador del evento click del botón btnCreateShortcut que es donde se hará la llamada al método CheckForShortcut

private void btnCreateShortcut_Click(object sender, EventArgs e)
{
if (CheckForShortcut())
MessageBox.Show("ShortCuts added");
}

7. Finalmente realizamos el proceso de deploy a través de Visual Studio. Damos click derecho sobre el proyecto y seleccionamos la opción Properties, cuando se muestren las propiedades seleccionamos la pestaña Publish.



Verificamos si en los Applications Files del despliegue se encuentra incluido el archivo del documento de word. En la columna Publish Status cambiamos a la opción Data File el documento de word


Luego de hacer este cambio cerramos la ventana de Application Files y hacemos click sobre el botón Publish Now y realizamos con esto la publicación.


Es hora ya de probar la aplicación, así que realizamos la instalación de nuestra aplicación. Cuando su proceso de instalación finalice esta de ejecutará automáticamente, damos click en el botón Create Shortcut... y en este momento debería crearse un shortcut a nuestro documento.


Con esto finalizamos el ejemplo, espero les sea de ayuda!

sábado, abril 28, 2007

Consideraciones de seguridad para implementaciones con ClickOnce

Siguiendo con el tema de seguridad en ClickOnce he aquí un artículo muy bueno que trata el tema de seguridad en los despligues de aplicaciones con ClickOnce: http://www.microsoft.com/spanish/msdn/articulos/archivo/
030506/voices/ClickOnceSec.mspx

Understanding .NET Code Access Security

Algo necesario en el despliegue de aplicaciones son las cuestiones de seguridad, así que para todos aquellos que quieren saber como trabaja el .NET CAS les recomiendo este articulo en donde de una manera práctica y sencilla se da una explicación de este tema:
http://www.codeproject.com/dotnet/UB_CAS_NET.asp

ClickOnce Cache Storage Quota

Navegando en la página de msdn library me tope con un tópico que me parece interesante compartirles, y es acerca de las aplicaciones que se despliegan a través de ClickOnce, estas tienen un límite de quota en el cliente el cual esta especificado en la siguiente clave de registro: HKEY_CURRENT_USER\Software\Classes\Software\Microsoft\Windows\CurrentVersion\Deplo
yment\OnlineAppQuotaInKB
en la que se expresa el tamaño del cache en kilobytes

Si deseas saber mas acerca del tema, este es el enlace:
http://msdn2.microsoft.com/en-us/library/267k390a.aspx

jueves, abril 12, 2007

Strings in .NET and C# - Introduction

Varias personas me han hecho la pregunta de que tipo de dato es un String y bueno aquí les dejo este artículo muy breve donde se da una definición del tipo de dato al que pertenece:

http://www.developerfusion.co.uk/show/4709/

lunes, abril 09, 2007

Walkthrough: Deploying a ClickOnce Application Manually

Bien luego de ver en el post anterio (Manifest Generation and Editing Tool) que existe una herramienta llamada Mage que nos permite realizar despliegue de nuestras aplicaciones sin necesidad de usar Visual Studio, les recomiendo que para poner en práctica esa teoría le den una mirada a este link:

http://msdn2.microsoft.com/en-us/library/xc3tc5xx(VS.80).aspx

Manifest Generation and Editing Tool (MAGE)

Por alguna extraña razón que aun no he podido descubrir no puedo realizar ciertas publicaciones con ClickOnce a través de mi Visual Studio 2005. Pero eso no es impedimento para hacerlo, pues es posible realizar esta labor a través de una herramienta incluida en el .NET Framework 2.0, que se denomina MAGE, la cual nos permite crear los manifiestos a través de la línea de comandos del SDK del Framework 2.0 o visualizando la herramienta gráfica MageUI digitando la palabra mage seguida de un enter tambien en la línea de comandos.

Tanto Mage desde la línea de comandos como MageUI nos permiten generar el manifesto de aplicación (.manifest file) y el manifesto de despliegue (.deploy file), los cuales son generados automáticamente cuando se hace el despliegue a traves de VS2005. Claro está el proceso de publicación del instalador en un directorio virtual del IIS tambien debe hacerse manualmente, lo bueno del tema manual es que se sabe exactamente que es lo que sucede con ClickOnce.

Así que si lo primero es saber acerca de los comandos que nos brinda ésta herramienta:
Mage: http://msdn2.microsoft.com/en-us/library/acz3y3te(VS.80).aspx
MageUI: http://msdn2.microsoft.com/en-us/library/xhctdw55(VS.80).aspx

ClickOnce en FireFox

Buscando en algunos foros información sobre ClickOnce me encontre con la grata sorpresa de que ya es posible desplegar aplicaciones con ClickOnce a través de navegadores FireFox, gracias a un adding que se instala para este navegador, así que para todos aquellos que deseen hacer pruebas de sus aplicaciones este es el link:

https://addons.mozilla.org/es-ES/firefox/addon/1608

domingo, marzo 11, 2007

Definiciones

Bien vamos a empezar definiendo en forma general que es ClickOnce y en que se basa para ofrecer su arquitectura de despliegue.

1. Qué es ClickOnce?
Es una tecnología de despliegue de aplicaciones windows forms (principalmente Smart Clients), basada en el concepto de publicación en un servidor Web, FTP o de archivos compartidos, para permitir la descarga, instalación y actualización automática de la aplicación.

ClickOnce no es el reemplazo de otras tecnología de despliegue como Windows Installer, y tampoco en posible de implementar en todos los escenarios.

El core de esta tecnología de despliegue esta basado en dos archivos XML: un archivo de manifiesto de aplicación y un archivo de manifiesto de despliegue

2. Manifest file: El manifesto de aplicación (.manifest file) describe los ensamblados y archivos que comprenden la aplicacion, incluyendo información de identidad de los ensamblados (nombre, hash/public key token, versión, y localización), dependencia de la aplicación, e informacion de confianza que afecte las políticas de seguridad bajo la cual la aplicación esta ejecutándose.

http://msdn2.microsoft.com/en-us/library/k26e96zf(VS.80).aspx

3. Application file: El manifesto de despliegue (.application file), contiene un resumen de la información de despliegue en si misma. incluyendo información de versión, donde encontrar el manifiesto de la información, y el numero de opciones respecto al comportamiento en la clase de despliegue y actualización que se llevará cabo

http://msdn2.microsoft.com/en-us/library/ws1c2fch(VS.80).aspx

Y como no hay mejor lugar que el hogar para aprender, este es el link de la libreria de MSDN para ClickOnce, así que les recomiendo que le den una mirada para empezar por la derecha.

ClickOnce Deployment for Windows Forms Applications (MSDN Resources)
http://msdn2.microsoft.com/en-us/library/wh45kb66.aspx

jueves, febrero 01, 2007

Welcome to ClickOnce!

Durante aproximadamente dos años he venido trabajando el despliegue de aplicaciones a través de ClickOnce, el cual ha venido evolucionando desde su versión beta hasta su versión estable del .Net framework 2.0, permitiendome obtener excelentes resultados en escenarios reales.

Así entonces quiero compartirle algunas de mis experiencias con ClickOnce, y mostrarles a través de ejemplos, tips y enlaces especializados el camino para conocer acerca de esta tecnología.