29/7/14

PsExec de PsTools

Psexec

PsExec.exe \\nombreEquipo -i -d -s "c:\windows\notepad.
exe"
-i para que salga en la pantalla (en alguna prueba con
    el notepad salio todo la ventana negra, problemas de repintado)
-d para que no se quede la línea de comandos pillada hasta que se 
    acabe el proceso. Lo lanza, devuelve el promp y un número de
    proceso que usamos para matarlo luego.
-s Usa la cuenta del sistema para lanzar la aplicación. Soluciona
    el problema de que no se vea la ventana
La aplicación saca algo como esto

c:\windows\notepad.exe started on nombreEquipo with process ID 7452.
Y lo matamos remotamente (el usuario podría cerrarlo) con:

C:\Users\icrufra\Desktop\PSTools>pskill.exe \\nombreEquipo 7452
Si se quiere entrar en la máquina remota con otro usuario se pondría –u (usuario@dominio) y el programa pide la clave.

15/7/14

Crear un acceso directo (Link) desde C#

(Con .net 4)
Type ShellType = Type.GetTypeFromProgID("WScript.Shell");
dynamic Shell = Activator.CreateInstance(ShellType);
dynamic shortcut = Shell.CreateShortcut(@"c:\borrame.lnk");
shortcut.TargetPath = @"c:\Windows\Notepad.exe";
shortcut.WorkingDirectory = @"c:\Windows";
shortcut.Save();
(Esto es antiguo con .net 4 usar el anterior)
Basado en:
http://www.codeproject.com/Articles/3905/Creating-Shell-Links-Shortcuts-in-NET-Programs-Usi
Por debajo usa Windows Scripting Host con lo que hay que importar un com (ocx) para que funcione. Es un poco chapuza pero es lo que hay.
En el proyecto se añade la referencia a ese com:
  1. En el proyecto,
  2. añadir referencia,
  3. de tipo com,
  4. el nombre es: “Windows Script Host Object Model”
Desde ese momento deja hacer un:
using IWshRuntimeLibrary;
El código que crea un link al notepad en el escritorio sería:

var shell = new WshShell();
IWshShortcut  link = (IWshShortcut)shell.CreateShortcut((Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),"borrame.lnk")));
link.TargetPath = @"c:\windows\notepad.exe";
link.Save();

6/3/14

Obtener información de catálogo de Base de datos Access

DataTable t = Ctx.con.GetSchema(OleDbMetaDataCollectionNames.Columns);
StringBuilder sb = new StringBuilder();
foreach(DataRow r in t.Rows){
 foreach(DataColumn c in t.Columns){
  sb.Append(String.Format("{0}: {1}||",c.ColumnName,r[c.ColumnName]));
 }
 sb.AppendLine();
}
Clipboard.SetText(sb.ToString());
MessageBox.Show(sb.ToString());
DataRow []dr = t.Select("TABLE_NAME = 'AnoActual' and COLUMN_NAME = 'Ano'");
MessageBox.Show(dr[0]["TABLE_NAME"].ToString() + dr[0]["COLUMN_NAME"].ToString());

29/1/14

Salto de página en html

@media all {
   div.saltopagina{
      display: none;
   }
}
@media print{
   div.saltopagina{
      display:block;
      page-break-before:always;
   }
}
<div class="saltopagina"><div>

17/1/14

Compilar proyecto desde línea de comandos

msbuild UILog1.csproj /p:Configuration=Release /t:Clean
El msbuild está en:
C:\Windows\Microsoft.NET\Framework\v4.0.30319
Este ejemplo borraría la versión release. Sin el /t:Clean la crearía. También funciona con soluciones. Y es compatible con SharpDevelop.

14/1/14

Nlog a fichero por mes

Crearía un log a un fichero. Cada mes crea un fichero nuevo. El fichero está, en principio, en la misma carpeta que el ejecutable.
NLog.Targets.FileTarget ft = new NLog.Targets.FileTarget();
ft.FileName ="FicheroDeLog.txt";
ft.ArchiveEvery = FileArchivePeriod.Month;
NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(ft, LogLevel.Trace);
LogManager.Configuration.AddTarget("File",ft);
Logger logger = LogManager.GetCurrentClassLogger();