Cerca

VB.NET – C# – Eseguire una applicazione con un altro utente

Indice Articolo

Ultimi articoli pubblicati

Oggi un cliente mi segnalava una problematica. Per non avere problemi di permessi durante l’esecuzione di un programma, questo doveva essere eseguito come un utente amministratore. Diciamo che inserire tutti gli utenti di una azienda nel gruppo degli amministratori delle macchine mi sembra eccessivo, l’unica cosa da fare era eseguire il programma come un utente amministratore, un semplice RunAs.

Per questo motivo ho sviluppato una applicazione di console la quale non fa nient’altro che eseguire l’eseguibile con una utenza specifica. Ecco il codice della applicazione in VB.NET:

Importate le seguenti librerie nel vostro progetto:

Imports System.Windows.Forms
Imports System.Diagnostics
Imports System.Security
Imports System.Security.Principal

Poi nella main del progetto aggiungete queste righe di codice sostituendo utenza, password, programma e altre variabili necessarie:

Dim password As SecureString
Dim proc As ProcessStartInfo
Dim pwd As String = “PASSWORD DEL UTENTE CHE ESEGUE L’APPLICAZIONE”
Try
password = New SecureString()
‘Se inserite questo eseguibile nello stesso percorso della applicazione da
‘eseguire potete utilizzare (Application.StartupPath & “\Programma.exe”)

proc = New ProcessStartInfo(“PERCORSO DEL ESEGUIBILE CHE VERRA’ ESEGUITO”)
For Each carattere As Char In pwd
password.AppendChar(carattere)
Next
proc.UserName = “NomeUtente”
‘Se è un utente di dominio specificate il dominio
proc.Domain = “EventualeDominio”
proc.Password = password
proc.UseShellExecute = False
Process.Start(proc)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try

Il codice è abbastanza semplice ma se ci sono dei dubbi chiedete pure. Ecco invece l’equivalente codice in C#:

using System.Security;
using System.Security.Principal;
using System.Diagnostics;
using System.Windows.Forms;

Nella main del progetto aggiungete:

SecureString password;
ProcessStartInfo proc
string pwd = “PASSWORD DEL UTENTE CHE ESEGUE L’APPLICAZIONE”;
Try
{
//Se inserite questo eseguibile nello stesso percorso della applicazione da
//eseguire potete utilizzare (Application.StartupPath & “\Programma.e
xe”)
proc = new ProcessStartInfo(“PERCORSO DEL ESEGUIBILE CHE VERRA’ ESEGUITO”);
password = new SecureString();
foreach (char carattere in pwd)
{
password.AppendChar(carattere);
}
proc.UserName = “NomeUtente”;
proc.Password = password;
//Se è un utente di dominio specificate il dominio
proc.Domain = “EventualeDominio”;
proc.UseShellExecute = false;
Process.Start(proc);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

Come sempre spero di essere stato chiaro in questa spiegazione. Buona programmazione a tutti.

3 risposte

  1. La descrizione è chiarissima e funzionale, ma non comprendo come mai su W7 64bit avviando un eseguibile senza diritti amministrativi o con diritti amministrativi usando quest’applicazione i problemi di latenza rimangono invariati, cosa che non avviene se eseguo l’eseguibile con il comando “esegui come amministratore”

  2. Qualche controllo in più da parte di Antiviurs o altri tool di sicurezza di Win7. Disattiva i controlli e fa una prova.

  3. in vb2008 come faccio ad eseguire solo parti di codice come amministratore:
    per esempio file.copy(“c:\temp\pippo.exe”, “c:\programmi\app\pippo.exe”)

    grazie

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

20 − tredici =