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!