RSS

Category Archives: Tutoriel

Tutoriel

[HowTo][Batch] Ajouter un service Windows par le registre Windows

Vous avez besoin d’installer un service Windows mais vous souhaiter maîtriser le nom exposer ou encore déployer plusieurs fois le service mais sous des noms différents. Voici comment le faire avec génération et exécution d’un fichier de registre Windows.

Pré-requis

Il est nécessaire de télécharger le ressource KIT de Windows contenant les outils instsrv.exe et srvany.exe.

Batch

echo Windows Registry Editor Version 5.00 > Service_Inserter.reg
set service_exe="<Chemin_vers_le_service>\service.exe"
rem Add keys in Service_Inserter.reg
echo. >> Service_Inserter.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<Service_Name>] >> Service_Inserter.reg
echo "ImagePath"=!service_exe:\=\\! >> Service_Inserter.reg
echo. >> Service_Inserter.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<Service_Name>] >> Service_Inserter.reg
echo "Start"=dword:00000003 >> Service_Inserter.reg
echo. >> Service_Inserter.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<Service_Name>\Parameters] >> Service_Inserter.reg
echo "Application"=!service_exe:\=\\! >> Service_Inserter.reg
instsrv.exe <Service_Name> srvany.exe
C:\Windows\System32\regedit.exe /S Service_Inserter.reg

 

Posted by on 22 mai 2014 in Batch, Programmation, Tutoriel

Leave a comment

Tags: , ,

[HowTo][Batch] Supprimer tous les sites FTP sur le port 21 dans IIS avec APPCMD

Vous voulez supprimer les sites FTP sur le port 21 enregistrer dans IIS simplement.

Voici la commande APPCMD qui va vous permettre de le faire sans difficultés.

Commande APPCMD

%WINDIR%\System32\inetsrv\appcmd.exe list sites /bindings:ftp/*:21: /xml | %WINDIR%\System32\inetsrv\appcmd.exe delete sites /in

Que dire de plus …

 

Posted by on 22 mai 2014 in Batch, Programmation, Tutoriel

Leave a comment

Tags: , , ,

[HowTo][Batch] Ajouter un nouveau compte utilisateur local Windows

Voici un script qui va vous permettre de réaliser une action que beaucoup de développeurs ou administrateurs réseaux utilisent, la création d’un compte utilisateur local.

Il s’agit plus d’un pense-bête que d’un tutoriel je l’avoue 😉

Commande batch

net user __username__ __password__ /add /fullname:"__fullname__"
if %errorlevel%==0 (
echo User added
)
if %errorlevel%==2 (
echo User already exists
)

Simple mais efficace, c’est que l’on cherche tous ^^

 

Posted by on 22 mai 2014 in Batch, Programmation, Tutoriel

Leave a comment

Tags: , ,

[HowTo][C#] Authentifier un compte Windows dans une application Console

Si vous souhaitez utilisez un login/password d’un compte Windows et que vous souhaitez l’utilisez pour trouver les groupes ou vérifier qu’il est Administrateur, voici un exemple qui vous permettra de le faire simplement.

   1:  using System;
   2:  using System.Runtime.InteropServices;
   3:  using System.Security.Principal;
   4:   
   5:  namespace Automatic_Blank_Card
   6:  {
   7:      class Program
   8:      {
   9:          /// <summary>
  10:          /// Logon the <paramref name="lpszUsername"/> on the <paramref name="lpszDomain"/> according to the <paramref name="dwLogonProvider"/> and <paramref name="dwLogonType"/>
  11:          /// </summary>
  12:          /// <returns>True if the logon success, otherwise false</returns>
  13:          [DllImport("advapi32.dll", SetLastError = true)]
  14:          public static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken);
  15:   
  16:          /// <summary>
  17:          /// Format the error message according to the <paramref name="dwMessageId"/> and <paramref name="dwLanguageId"/>
  18:          /// </summary>
  19:          /// <returns>1 if the format success, otherwise 0</returns>
  20:          [DllImport("kernel32.dll")]
  21:          public static extern int FormatMessage(int dwFlags, ref IntPtr lpSource, int dwMessageId, int dwLanguageId, ref String lpBuffer, int nSize, ref IntPtr Arguments);
  22:   
  23:          /// <summary>
  24:          /// Close the unmanaged object to free memory and GAC
  25:          /// </summary>
  26:          [DllImport("kernel32.dll", SetLastError = true)]
  27:          [return: MarshalAs(UnmanagedType.Bool)]
  28:          static extern bool CloseHandle(IntPtr hObject);
  29:   
  30:   
  31:          public static string GetErrorMessage(int errorCode)
  32:          {
  33:              const int FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x100;
  34:              const int FORMAT_MESSAGE_IGNORE_INSERTS = 0x200;
  35:              const int FORMAT_MESSAGE_FROM_SYSTEM = 0x1000;
  36:   
  37:              const int dwFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS;
  38:              const int msgSize = 255;
  39:   
  40:              string lpMsgBuf = null;
  41:              
  42:              var lpSource = IntPtr.Zero;
  43:              var lpArguments = IntPtr.Zero;
  44:              var returnVal = FormatMessage(dwFlags, ref lpSource, errorCode, 0, ref lpMsgBuf, msgSize, ref lpArguments);
  45:   
  46:              if (returnVal == 0)
  47:                  throw new Exception("Failed to format message for error code " + errorCode + ". ");
  48:              return lpMsgBuf;
  49:   
  50:          }
  51:   
  52:          private static string GetString(bool secured)
  53:          {
  54:              var result = string.Empty;
  55:              ConsoleKeyInfo key;
  56:              do
  57:              {
  58:                  key = Console.ReadKey(true);
  59:                  if (key.Key != ConsoleKey.Backspace)
  60:                  {
  61:                      if (secured)
  62:                      {
  63:                          Console.Write("*");
  64:                      }
  65:                      else
  66:                      {
  67:                          Console.Write(key.KeyChar);
  68:                      }
  69:                      result += key.KeyChar;
  70:                  }
  71:                  else
  72:                  {
  73:                      Console.Write("b");
  74:                  }
  75:              } 
  76:              while (key.Key != ConsoleKey.Enter);
  77:   
  78:              Console.WriteLine(string.Empty);
  79:   
  80:              return result;
  81:          }
  82:   
  83:          static void Main(string[] args)
  84:          {
  85:              Authenticate();
  86:              Console.ReadLine();
  87:          }
  88:   
  89:          static void Authenticate()
  90:          {
  91:              var userName = "n";
  92:              var pwd = "n";
  93:   
  94:              try
  95:              {
  96:                  const int LOGON32_PROVIDER_DEFAULT = 0;
  97:                  const int LOGON32_PROVIDER_WINNT50 = 3;
  98:   
  99:                  const int LOGON32_LOGON_INTERACTIVE = 2;
 100:                  const int LOGON32_LOGON_NETWORK = 3;
 101:                  const int LOGON_TYPE_NEW_CREDENTIALS = 9;
 102:   
 103:                  IntPtr tokenHandle;
 104:                  bool result;
 105:                  do
 106:                  {
 107:                      var machineName = Environment.UserDomainName;
 108:   
 109:                      //For DOMAIN authentication, prefers use LOGON_TYPE_NEW_CREDENTIALS, LOGON32_PROVIDER_WINNT50 recommended by MSDN
 110:                      //NOTE: userName AND pwd is useless because the authenticationType is Negotiate so will be deduced directly
 111:                      //NOTE: Use 'n' in userName and pwd instead of 'string.Empty' to validate the entry parameters
 112:                      result = LogonUser(userName, machineName, pwd, LOGON_TYPE_NEW_CREDENTIALS, LOGON32_PROVIDER_WINNT50, out tokenHandle);
 113:                      //For LOCAL authentication
 114:                      //Console.Write("Username : " + machineName + "/");
 115:                      //userName = GetString(false);
 116:                      //Console.Write("Password : ");
 117:                      //pwd = GetString(true);
 118:                      //result = LogonUser(userName, machineName, pwd, LOGON_TYPE_NEW_CREDENTIALS, LOGON32_PROVIDER_WINNT50, out tokenHandle);
 119:                      if (!result)
 120:                      {
 121:                          var ret = Marshal.GetLastWin32Error();
 122:                          Console.WriteLine(GetErrorMessage(ret));
 123:                          CloseHandle(tokenHandle);
 124:                      }
 125:                  } while (!result);
 126:   
 127:                  var newId = new WindowsIdentity(tokenHandle);
 128:                  var userperm = new WindowsPrincipal(newId);
 129:   
 130:                  Console.WriteLine(userperm.IsInRole(WindowsBuiltInRole.Administrator)
 131:                                          ? "Access Granted. User is admin"
 132:                                          : "Access Granted. User is not admin");
 133:   
 134:                  CloseHandle(tokenHandle);
 135:              }
 136:              catch (Exception ex)
 137:              {
 138:                  Console.WriteLine("Exception occurred. " + ex.Message);
 139:              }
 140:          }
 141:      }
 142:  }

Il peut bien évidemment être améliorer et je vous invites à le faire 😉

 

Posted by on 18 décembre 2013 in .Net, C#.Net, Codes, Programmation, Tutoriel

Commentaires fermés sur [HowTo][C#] Authentifier un compte Windows dans une application Console

[IIS][HowTo] Configurer le serveur d’états ASP.Net (ASP.Net State Server)

Dans IIS, il est possible pour un site web de configurer la gestion de ses sessions pour être manager par le serveur d’état ASP.Net qui par défaut écoute sur le port 42424 du serveur sur lequel il est exécuté.

Pour le configurer :

  1. Aller dans IIS, cliquer sur le site web ou l’application web qui doit utiliser le serveur d’état.
  2. Dans le panneau de droite, cliquer sur Etat de session
  3. Dans le panneau qui s’affiche, choisir Serveur d’état
  4. Dans le panneau de commande de droite, cliquer sur Appliquer pour sauvegarder les paramètres

Voilà votre site web ou application web utilise désormais le serveur d’états pour gérer ses sessions. Ainsi même lorsque le pool d’application de votre site web ou application web s’arrête, les sessions sont préservées durant leur durée de vie (~20min par défaut).

Configurer le service ASP.Net State Server

Maintenant qu’un site web ou application web utilise le serveur d’état, il faut que ce dernier soit lancé pour que tout fonctionne correctement.

Pour cela, ouvrez les services de Windows

  • Windows + R / taper services.msc
  • Panneau de configuration / Système et sécurité / Outils d’administration / Services

Dans la liste des services :

  • Chercher le service nommé ASP.Net State Server
  • Cliquer droit dessus et cliquer sur Propriétés
  • Changer le type de démarrage en Automatique
  • Cliquer sur Démarrer
  • Cliquer sur OK

Le service est désormais configuré de façon standard et sera toujours lancé sur la machine hôte.

NOTE: Dans un environnement de PRODUCTION, le serveur d’état est dans la majorité des cas découplé du serveur Web, souvent configuré en Load Balancing, et donc la configuration standard ne s’applique plus. Pensez donc à adapter les paramètres afin de répondre à la configuration de l’environnement sur lequel est déployé le site web ou l’application web. 😉

 

Posted by on 5 décembre 2013 in Tutoriel

Leave a comment

Tags: , ,

[WinForms][HowTo] Créer un UserControl avec gestion de la transparence

Lors de vos développements d’application WinForms, vous avez peut-être déjà été confronté ou êtes actuellement confronté à une nécessité de rendre un contrôle transparent.

Je me suis retrouvé dans ce cas de figure en voulant designer un pion d’un jeu de dames ;-).

Finalement, cela n’est pas très compliqué quand on connaît :-P. Ce que je vais vous expliquer ici ne représente que la transparence du contrôle une fois positionné dans son parent et non durant le déplacement du contrôle, qui fera l’objet d’un autre article.

Couleur de fond

Le premier des réflexes est de définir la couleur de fond du contrôle à Transparent mais cela ne suffit pas et ne constitue que la première étape.

this.BackColor = Color.Transparent;

Support de la couleur de fond transparente

Afin que la couleur de fond soit correctement appliquée, il est nécessaire de spécifier que le contrôle doit, dans ses règles de style, avoir défini la prise en charge de la transparence.

this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);

Surcharger la méthode OnPaint

Afin de permettre que le fond du contrôle soit transparent, il est nécessaire de réécrire la méthode OnPaint afin de ne redessiner que ce qui est nécessaire. Dans mon cas, il s’agit d’une image PNG qui supporte donc la transparence. Mais vous pouvez tout aussi bien vouloir dessiner une forme géométrique quelconque à l’intérieur de votre contrôle. Tout cela est possible grâce aux Brushes du .Net Framework.

Voici un exemple de redéfinition de la méthode dans le cadre de mon jeu de dames :

protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);
    //Draw the image of the corresponding pawn
    Mode.execute();
    e.Graphics.FillEllipse(Mode.Texture, 0, 0, Case.Side_Size, Case.Side_Size);
}

Surcharger la méthode OnPaintBackground

Afin que le fond reste transparent il est également nécessaire d’empêcher le dessin du background afin de garantir que rien de viendra se dessiner inopinément.

protected override void OnPaintBackground(PaintEventArgs e)
{
    //Do nothing
}

Surcharger la méthode CreateParams

Il est également nécessaire d’indiquer le code de transparence à utiliser pour l’appliquer correctement sur le contrôle.

protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= 0x20;
        return cp;
    }
}

Conclusion

J’espère que cela vous permettra de réaliser vos souhaits de développement et d’affiner encore vos applications pour les rendre plus esthétiques. Ce sujet n’est malheureusement pas complet et ne traite que de la base à connaître. Je reste à disposition pour tout commentaire.

 

Posted by on 4 septembre 2013 in .Net, C#.Net, Tutoriel

2 Comments

[RDLC][HowTo] Appliquer un format sur une partie d’un texte

Etant confronté actuellement à ce problème j’ai recherché sur Internet la solution et je me suis dit qu’il fallait faire en sorte que cela soit mis plus en avant.

Ainsi lorsque vous ajouter une textbox dans votre rapport RDLC et que le composant est alimenté en texte par une expression, on se demande comment appliquer un style à une partie du texte rendu par l’expression.

En fait, rien de plus simple quand on connaît la fonctionnalité :-). Il s’agit en fait d’une option du composant accessible en faisant un clic droit sur la textbox, puis en cliquant sur Propriétés. Dans l’onglet Général, il suffit de cocher la case HTML – Interpréter les balises HTML comme des styles et de rajouter les balises nécessaires dans votre expression.

Vous pouvez trouver confirmation directement dans la documentation MSDN ou encore sur le forum d’aide StackOverflow

 

Posted by on 10 juillet 2013 in Reporting, Tutoriel, Visual Studio IDE

Leave a comment

Tags: , ,