3ENGINE

Programación y otros cachivaches

Etiqueta: .NET

Página 2/7

Tecnologia

Cómo crear un servicio Windows .NET autoinstalable


Cuando llega la hora de instalar un servicio Windows en .NET, en mucho sitios recomiendan instalar el servicio mediante una utilidad de la línea de comandos llamada installutil.exe

Comandos básicos para instalar y desinstalar un servicio con installutil.exe:

installutil.exe miservicio.exe
installutil.exe /u miservicio.exe

Una vez instalado podéis arrancar y parar el servicio mediante la utilidad net.exe:

net start miservicio.exe
net stop miservicio.exe

Crear un servicio Windows .NET autoinstalable

El problema de installutil.exe es que sólo la encontraras si instalas Visual Studio en el ordenador donde necesitas instalar el servicio. Una solución es crear un proyecto de InstallShield para crear un autoinstalable. Pero yo os cuento una manera mas sencilla de conseguir esto y ahorraros el sufrimiento de utilizar InstallShield 🙂

Antes de nada, el código incluye una directiva DEBUG que permite debugar el servicio como si se tratara de una aplicación de consola. Esto lo expliqué en Debug desde VS.NET de un servicio Windows.

Por último, recomiendo añadir un ProjectInstaller.cs a vuestro servicio tal como explica este enlace en el paso 5. Añadirlo nos permitirá entre otras cosas especificar el tipo de cuenta, el nombre y la descripción del servicio, el modo de arranque, etc.

Código de ejemplo:

using System.ServiceProcess;
using System.Configuration.Install;
using System.Reflection;
using System;
using System.Threading;

namespace MyService
{
    static class Program
    {
        /// 
        /// Punto de entrada principal para la aplicación.
        /// 
        static void Main(string[] args)
        {
            #if (!DEBUG)    
                if (System.Environment.UserInteractive)
                {
                    string parameter = string.Concat(args);
                    switch (parameter)
                    {
                        case "-i":
                        case "-install":
                            try
                            {
                                ManagedInstallerClass.InstallHelper(new string[] { Assembly.GetExecutingAssembly().Location });
                            }
                            catch
                            {
                            }
                            break;
                        case "-u":
                        case "-uninstall":
                            try
                            {
                                ManagedInstallerClass.InstallHelper(new string[] { "/u", Assembly.GetExecutingAssembly().Location });
                            }
                            catch
                            {
                            }
                            break;
                    }
                }
                else
                {
                    ServiceBase[] ServicesToRun;
                    ServicesToRun = new ServiceBase[] 
                    { 
                        new ServiceWatcher()
                    };
                    ServiceBase.Run(ServicesToRun);
                }

            #else
                // debug mode
                ServiceWatcher service = new ServiceWatcher();
                service.Init();
                Thread.Sleep(Timeout.Infinite);
            #endif
        }
    }
}

Básicamente la idea es que se puede tener un servicio autocontenido para instalar y desinstalar utilizando ManagedInstallerClass como se muestra el ejemplo.

De modo que si compilas el servicio en modo RELEASE para instalar el servicio:

miservicio.exe -install

y para desisntalarlo:

miservicio.exe -uninstall



Tecnologia

Cómo descargar una imagen de una página y mostrarla en un Winform de .NET


A veces puede interesar descargar de internet imágenes u otros recursos a local. Aquí te explico cómo descargar una imagen de una página y mostrarla en un Winform de .NET con la particularidad que en ningún momento guardamos la imagen en disco:

Código para descargar una imagen de una página y mostrarla en un Winform:

private void buttonCargar_Click(object sender, EventArgs e)
{
string[] imagenes = new string[] 
{"https://i.ytimg.com/vi/r5zVP6tmvRQ/mqdefault.jpg", 
 "https://i.ytimg.com/i/ZJ7m7EnCNodqnu5SAtg8eQ/1.jpg",
 "https://i.ytimg.com/vi/oY6ZMx_lVks/default.jpg",
 "https://i.ytimg.com/vi/REd0FYX8Zno/default.jpg",
 "https://i.ytimg.com/vi/ZJxN1swBnhg/default.jpg"};

using (WebClient client = new WebClient())
{
this.imageList.ColorDepth = ColorDepth.Depth32Bit;
this.imageList.ImageSize = new Size(60, 50);

foreach (var imagen in imagenes)
{
Byte[] byteImage = client.DownloadData(imagen);
MemoryStream memoryStream = new MemoryStream(byteImage);
Image image = Image.FromStream(memoryStream);
this.imageList.Images.Add(image);

ListViewItem item = new ListViewItem();
item.ImageIndex = imageList.Images.Count - 1;
item.SubItems.Add(imagen);
this.listView.Items.Add(item);
}
}
}

Del ejemplo tenemos una lista de cinco imágenes a descargar:

  • 12-13: indica la profundidad de color y tamaño de la imagen a guardar en imageList
  • 17-20: descarga la imagen y la guarda en imageList
  • 22-25: añadir la imagen y la url en listView

El resultado es el siguiente:

descargar una imagen de una página y mostrarla en un Winform

Podeis obtener las fuentes del ejemplo desde aquí .




Tecnologia

Cómo añadir un video de Youtube en un Winform de .NET


Pasos para añadir un video de Youtube a un Winform de .NET

1. Añadir una referencia a la libreria Shockwave Flash. Para ello, ir la opción Agregar referencia, pestaña COM y seleccionar el componente Shockwave Flash:

añadir un video de Youtube en un Winform 1

Ahora nuestro proyecto tienen una referencia ShockwaveFlashObjects

añadir un video de Youtube en un Winform 2

2. Añadir al cuadro de herramientas el control Shockwave Flash Object. Para ello, ir al cuadro de herramientas, click derecho del ratón y seleccionar la opción Elegir elementos. Una vez se abra el diálogo (tarda un poco) ir a la pestaña Componentes COM y seleccionar el componente Shockwave Flash Object:

añadir un video de Youtube en un Winform 3

Si todo ha ido bien, aparecerá en el cuadro de herramientas un nuevo elementos:

añadir un video de Youtube en un Winform 4

3. Añadir el control Shockwave Flash Object a un formulario y un botón que necesitaremos para hacer una prueba. Añadir el siguiente código al evento click del botón:

        
private void bPlay_Click(object sender, EventArgs e)
{
   axShockwaveFlash1.LoadMovie(0, "http://www.youtube.com/v/VzEHmcABGUU");
   axShockwaveFlash1.Play();
}

4. Si todo ha ido bien este será el resultado:

añadir un video de Youtube en un Winform 5




English, Tecnologia

How to insert an InputBox in C#


Although seem lie, in the C# language not exist a dialog box for ask a data. If you don’t want create your own dialog box and don’t need personalize it, you can use the sentence Inputbox that you can find in Microsoft.VisualBasic assembly.
This sentence show a modal dialog with a label, text box, a button accept and other button for cancel.

The definition of sentence InputBox is as follow:

       
public static string InputBox(
        string Prompt,
string Title,
string DefaultResponse,
int XPos,
int YPos)
  • Prompt: Dialog message
  • Title: Optional. Dialog title.
  • DefaultResponse: Optional. answer by default.
  • xPos: Optional. Coordinate X, centered by default.
  • yPos: Optional. Coordinate Y, centered by default.

Steps for insert an InputBox in C#:

1. Insert a reference to Microsoft.VisualBasic assembly:

How to insert an InputBox in C# - 1

How to insert an InputBox in C# - 2

2. Insert the sentence:

private void btnClickInputBox_Click(object sender, EventArgs e)
{
    string texto = Microsoft.VisualBasic.Interaction.InputBox(
        "Texto de la pregunta",
        "Titulo del diálogo",
        "Respuesta por defecto");
}

Note: if the user cancels the dialog then the statement returns an empty string

Result:

How to insert an InputBox in C# - 3