Windows Internals with Sysinternals
2 day webinar/virtual class –
presented by David Solomon
Next offering:
October 19 & 21, 10:00am-5:00pm Eastern Time (GMT-5)
Click here to register
Hard and soft
2 day webinar/virtual class –
presented by David Solomon
Next offering:
October 19 & 21, 10:00am-5:00pm Eastern Time (GMT-5)
Click here to register
Welcome to AP Information Technology Services.
{{abouttext}}
In the discussion about our article on changing permissions on a single file in Windows Vista, TechRepublic member rignatius asked if we could explain how to apply the permission changes to all of the subfolders and files in the hierarchy of a particular folder. This How do I… shows that the basic procedure is the same, but there are a few more check boxes to look at during the process.
Most Popular Entries This Week — August 02, 2007
Payables Responsibility inconsistent (+9 Groups)
How Effective Is Your Antivirus? (+3 White Papers)
ROI? (Documents)
Is ERP Dead?
Plexus Online
PeopleSoft Developer Needed
Middle East 2nd Rapid Enterprise… (+2 Events)
OpenNETCF.org es un repositorio de información y código fuente sobre Microsoft .NET Compact Framework. OpenNETCF.org empezó como un proyecto de código abierto para extender la funcionalidad de .Net 1.x. A partir del Smart Device Framework 2.0 el c
OpenNETCF.org es un repositorio de información y código fuente sobre Microsoft .NET Compact Framework. OpenNETCF.org empezó como un proyecto de código abierto para extender la funcionalidad de .Net 1.x. A partir del Smart Device Framework 2.0 el código fuente dejo de ser libre.
En el mismo sito de Microsoft hay referencias a ejemplos de aplicaciones móviles que usan las extensiones de OpenNETCF.
El articulo Building a Wi-Fi Discovery Application with the .NET Compact Framework 2.0 explica a detalle una aplicación que usa estas librerías e incluye código fuente. Es un buen ejemplo para empezar a ver el ciclo complete de una aplicación móvil no trivial.
La solución de muestra incluye dos proyectos. La aplicación en si, y el código fuente OpenNETCF referenciado en la misma. Al construir la solución en Visual Studio 2005 se marcan warnings pero los proyectos se construyen con éxito. Se puede probar la aplicación en una Pocket PC 2003. Si la tarjetea de WiFi esta desactivada la aplicación genera una excepción. No es una aplicación de grado comercial pero es una buena referencia de lo que se puede hacer.
El articulo Deploying .NET Compact Framework 2.0 Applications with .cab and .msi Files continua con este ejemplo y explica como hacer un proyecto de instalación.
En un proyecto para aplicaciones inteligentes, cada archivo se marca con una acción de generación que se define en la ventana Propiedades del modo siguiente:
Antes de pasar a construir la aplicación para dispositivos inteligentes y crear los archivos .cab para la implementación, no se debe olvidar cambiar el modo de generación del proyecto de depuración a liberación. Esto reducirá el tamaño del ejecutable en el dispositivo (hecho importante en el caso de los dispositivos inteligentes de almacenamiento restringido) y aumentará la velocidad de ejecución.
Para hacer un proyecto de instalación automatica es necesario efectuar los siguientes pasos:
1. Crear archivos .cab para cada dispositivo donde va a correr la aplicación. Un .cab de instalación puede contener un archivo setup.dll con código no administrado, y por eso se requiere un .cab diferente para cada familia de procesadores. Si la aplicación no requiere de este archivo, entonces un solo .cab es suficiente.
2. Agregar los archivos y entradas de registro de la aplicación a los .cab
3. Proveer el código de acciones especiales a ejecutar durante la instalación y desinstalación de la aplicación.
4. Registrar la aplicación con ActiveSync para que se pueda instalar de la PC de escritorio a la Pocket PC.
5. Empacar todo en un archivo .msi
El primer paso es agregar un proyecto
Other Project types->Setup and deployment->Smart Device Cab Project
a la solución.
Al construir el proyecto se generan 3 archivos un .cab, un .log, y un .inf. El archivo .inf tiene parámetros de instalación que serán usados por ActiveSync.
El .cab es suficiente para instalar una aplicación en la Pocket PC pero es posible agregar un proyecto de instalación de escritorio para simplificar el proceso para el usuario.
Para aplicaciones móviles, hay dos cosas que el instalador debe hacer. Debe presentarle al usuario las pantallas del asistente de instalación en la PC de escritorio y debe instalar la aplicación en la Pocket PC.
La instalación en el Pocket PC se hace a través una aplicación llamada CeAppMgr.exe que es parte de ActiveSync. CeAppMgr.exe requires un archivo .ini que se debe agregar manualmente. En nuestro caso el .ini contiene lo siguiente:
[CEAppManager]
Version = 1.0
Component = OpenNETCF WiFiDiscovery
[OpenNETCF WiFiDiscovery]
Description = Sample WiFi Network Discovery Application using the SDF
CabFiles = WiFiDiscovery.cab
Para activar el modo de depuración de CeAppMgr.exe es necesario meterle mano al Registry. Para los valientes
[HKLMSoftwareMicrosoftWindows CE ServicesAppMgr]
“ReportErrors”=dword:1
Existen algunos requerimientos que, aunque no son estrictamente necesarios técnicamente, son prácticas establecidas y necesarias para certificación.
Aplicaciones registradas con CeAppMgr deben estar en un subfolder de ActiveSync por ejemplo. Estos requerimientos los maneja el instalador utilizando variables predefinidas de Windows para mayor flexibilidad y para facilitar localización del software en varios idiomas. Para ejecutar estas acciones se agrega una clase de instalación.
Agregamos un proyecto de librería de Windows a la solución de Visual Studio. A este proyecto le agregamos la installer class. Esta clase soporta eventos relacionados con el proceso de instalación y permite definir acciones previas y posteriores al proceso de instalación y al de desinstalación. Por ejemplo,
public CustomInstaller()
{
InitializeComponent();
this.BeforeInstall +=
new InstallEventHandler(CustomInstaller_BeforeInstall);
this.AfterInstall +=
new InstallEventHandler(CustomInstaller_AfterInstall);
this.BeforeUninstall +=
new InstallEventHandler(CustomInstaller_BeforeUninstall);
}
Es necesario definir constantes para usar dentro del código en términos de entradas en el Registry, bajo la llave HKLM.
De esta manera el código sigue siendo valido bajo distintos idiomas y versiones de Windows.
private const string CEAPPMGR_PATH =
@”SOFTWAREMicrosoftWindowsCurrentVersionApp PathsCEAPPMGR.EXE”;
private const string ACTIVESYNC_INSTALL_PATH =
@”SOFTWAREMicrosoftWindows CE Services”;
private const string INSTALLED_DIR = “InstalledDir”;
private const string CEAPPMGR_EXE_FILE = @”CEAPPMGR.EXE”;
private const string CEAPPMGR_INI_FILE = @”WiFiDiscovery.ini”;
private const string APP_SUBDIR = @”OpenNETCF WiFiDiscovery”;
private string TEMP_PATH =
Environment.SystemDirectory + @”TEMPWiFiDiscovery”;
El ultimo paso es crear el proyecto de instalación.
Other project types ->Setup and deployment->Setup project
Despues de crear el proyecto, realizamos las siguientes acciones:
1. Cambiar el nombre del archivo de salida.
2. Indicar la ubicación de un directorio para guardar archivos temporales. Este direcorio debe estar ubicado de acuerdo a lo que definimos en la clase de instalación.
3. Definir las propiedades del proyecto como compañía, nombre de aplicación, etc.
4. Agregar los archivos de salida del proyecto CAB
5. Agregar en la carpeta de aplicación la salida de la clase de instalación
6. Agregar Custom Action usando la clase de instalación
7. Agregar archivo .ini
8. Construir todos los proyectos en la solución
9. Probar el instalador
Para mayor detalle se pueden consultar los articulos originales en el sitio de Microsoft.
El articulo Developing and Deploying Pocket PC Setup Applications aunque obsoleto tiene información complementaria y discute el caso .Net 1.x
Antes de poder ejecutar la aplicación, es preciso instalar .NET Compact Framework en el dispositivo. Si la aplicación requiere SQL Server CE, también será necesario instalar el archivo .cab adecuado. Aunque ambos se instalan automáticamente al implementar la aplicación desde Visual Studio .NET mediante el menú Implementar o al depurar el dispositivo, en producción será necesario emplear un mecanismo diferente.
Como se mencionó anteriormente, los archivos .cab creados para un proyecto no incluyen los archivos .cab correspondientes a .NET Compact Framework o SQL Server CE. Aunque Pocket PC 2003, y dispositivos posteriores, suelen incluir .NET Compact Framework en ROM, será preciso agregar los archivos .cab específicos de la plataforma en cuestión en el caso en que dichos dispositivos no los incluyan. Un modo sencillo de llevar a cabo esta operación para .NET Compact Framework es descargar y ejecutar el redistribuible.
Referencia:
Patrones de implementación para Microsoft .NET Compact Framework
MinGW o MinGW32 (Minimalist GNU for Windows) es una implementación de los compiladores GCC para la plataforma Win32, que permite migrar aplicaciones GNU a entornos Windows. Es un derivado de Cygwin en su versión 1.3.3.MinGW incluye un conjunto de la …
MinGW o MinGW32 (Minimalist GNU for Windows) es una implementación de los compiladores GCC para la plataforma Win32, que permite migrar aplicaciones GNU a entornos Windows. Es un derivado de Cygwin en su versión 1.3.3.
MinGW incluye un conjunto de la api de Win32, permitiendo un desarrollo de aplicaciones nativas para esa plataforma, pudiendo generar ejecutables y librerías usando la API de Windows.
MinGW fue creado por Colin Peters, el 1 de julio de 1998, compilándolo con Gygwin. La primera versión nativa de MinGW fue realizada por Jan-Jaap van der Heijden, quien también tuvo participación en el proyecto GCC. Mumit Khan estuvo a cargo del mantenimiento del proyecto e incluyo al compilador algunas características propias de Windows. Los archivos de cabecera del API de Windows fueron provistos por Anders Norlander.
Una de las desventajas de MinGW es que los ejecutables que genera son de tamaño más grande que los generados por otros compiladores. Esto ocurre cuando se incluyen los archivos de cabecera estándares de C++ (por ejemplo, #include ), y se debe a que el compilador vincula todas las librerías dentro del archivo ejecutable de manera estática.
MinGW incluye MSYS (Minimal SYStem) un shell POSIX/Bourne para ejecutar scripts de configuración usados por make y ./configure
Después de descargar MinGW y MSYS, incluyendo mingw-runtime, w32api, binutils y gcc, gdb y mingw32-make se pueden expandir los archivos de dos formas. Poner el directorio de MinGW dentro de MSYS o instalarlos en directorios distintos y modificar el archivo MSYS /etc/fstab para agregar un apuntador al directorio donde mingw esta instalado.
Para probar la instalación se puede correr el shell de msys y probar el comando de línea
gcc –v
Para habilitar el soporte de IDEs agregar lib a la variable de entorno LIBRARY_PATH y los subdirectorios bin de y a la variable de entorno PATH
Aplicación de consola:
En un archivo con el nombre hello.c poner el siguiente código:
#include
int main(int argc, char **argv)
{
printf (“Hellon”);
return (0);
}
y compilar con
gcc -c hello.c
y después
gcc -o hello hello.o
Alternativamente
gcc -o hello hello.c
En un archivo con el nombre hello.cpp poner el siguiente código:
#include
int main(int argc, char **argv)
{
std::cout << "Hello" << std::endl;
return (0);
}
y compilar con
g++ -c hello.cpp
g++ -o hello hello.o
Aplicación Windows
En un archivo con el nombre hello.c poner el siguiente código:
#include
int WINAPI WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PSTR szCmdLine,
int iCmdShow)
{
MessageBox (NULL, “Hello”, “Hello Demo”, MB_OK);
return (0);
}
para crear el ejecutable usar los comandos de linea
gcc -c hello.c
y
gcc -o hello hello.o -mwindows
el parametro -mwindows es necesario para que se incluyan las librerias necesarias para un programa Windows.
dll
En un archivo con el nombre dllfct.h poner el siguiente código:
#ifdef BUILD_DLL
// the dll exports
#define EXPORT __declspec(dllexport)
#else
// the exe imports
#define EXPORT __declspec(dllimport)
#endif
// function to be imported/exported
EXPORT void tstfunc (void);
En un archivo con el nombre dllfct.c poner el siguiente código:
#include
#include “dllfct.h”
EXPORT void tstfunc (void)
{
printf (“Hellon”);
}
En un archivo con el nombre Hello.c poner el siguiente código:
#include “dllfct.h”
int main ()
{
tstfunc ();
return (0);
}
Para crear una dll y un ejecutable que lo use:
gcc -c hello.c
gcc -c -DBUILD_DLL dllfct.c
gcc -shared -o tst.dll -Wl,–out-implib,libtstdll.a dllfct.o
gcc -o hello.exe hello.o -L./ -ltstdll
Se puede especificar el directorio a usar para los includes durante la compilación con
-I/path/to/headers
y las librerias para link:
-L/usr/lib/library
Usualmente no hay necesidad de andar moviendo las librerias.
Archivo .def para un dll
Si tiene un dll llamado file.dll y quiere crear un archivo .def con el nombre file.def,
echo EXPORTS > file.def
nm file.dll | grep ‘ T _’ | sed ‘s/.* T _//’ >> file.def
Para crear una biblioteca con el nombre file.a :
dlltool –def file.def –dllname file.dll –output-lib file.a
“The reality is that they are not going to sue a single customer,”
Jim Zemlin, executive director of the Linux Foundation.
Microsoft siempre ha manejado la comercialización de software como un deporte de contacto. Vince Lombardi no lo haría mejor.
Guest Author – Diane Cipollo
One of the nice features of BloggerTM is that you can post an entry to your blog just by sending an email message.
The only thing that you need to do in order to use this Mail-to-Blogger feature is to create a secret email address especially for this purpose. It needs to be a secret email address so that only you can post to your blog via email. Once you have done this, emailing a blog entry is as simple as sending any other email message. Log in to your Blogger account and let’s create that secret email address.
From the menu at the top of the page, click on the Settings tab and then click on Email.
BlogSend Address. If you wish to have your blog entry automatically emailed back to you, enter your regular email address in the BlogSend Address box.
Mail-to-Blogger Address. The code for this secret email address is just like the code for any email address. For example, your email address that you use on your website might be made up from your name and the name of your website. You@YourWebSite.comBut for this secret email address, the @YourWebSite.com is replaced with @blogger.com and your name is replaced with the username you created for your Blogger account. username.?????@blogger.comThe missing part of the email address (????) is the only part that you need to add. As mentioned above, you will want this email address to remain a secret. Therefore, you will want to use something that others will not be able to guess. Type your secret code into the box. It must have at least four characters.
You have the choice to publish your emailed blog entry automatically when you send the email message or it can be saved as a draft. If you choose the second, you will need to log in to your account and publish the entry manually. Let’s put a checkmark in the box next to Publish in order to have all emailled entries automatically published to your blog.
Click Save Settings to save the changes to your account.That’s all there is to it. You are now ready to post entries to your blog via email. Just remember a few things when composing the email blog message.
The text in the Subject line of the email message will become the title of your blog entry.
The text in the body of the email message will become the blog entry. If your email program adds extra text or advertisements to the end of your messages, you will not want that to be included in your blog entry. To prevent this, place #end at the end of your blog text.