View Full Version : Privilegi di amministratore ad una cartella
Ciao, devo spostare la raccolta dei programmi portatili nella partizione di sistema, e ho creato una cartella apposita che contiene tutte le sottocartelle dei programmi in questione. E' possibile dare privilegi di amministatore alla cartella in modo che non debba assegnare a ciascun eseguibile di essere avviato come amministratore?
x_Master_x
21-12-2016, 18:00
L'esecuzione degli eseguibili e relativi privilegi dipende dal manifest. Se nel manifest è indicato "requireAdministrator" allora automaticamente ad ogni avvio verrà richiesta l'esecuzione con i privilegi elevati, altrimenti no.
L'unica alternativa è il registro:
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
Dove il nome è il percorso completo dell'.exe e come dato RUNASADMIN. Si potrebbe fare un batch basandosi su queste informazioni. Ovviamente se il percorso dell'eseguibile cambia bisogna aggiornare i valori nel registro.
Ciao, grazie per la risposta. In realtà il valore che hai indicato viene scritto da windows quando decidi tramite la scheda di compatibilità di impostare l'esecuzione del programma come amministratore.
Speravo di poter eliminare la richiesta di conferma tutte le volte che avvio i programmi portatili, che non funzionano a dovere se non sono eseguiti come amministratore quando lanciati dalla partizione di sistema.
x_Master_x
22-12-2016, 09:42
Aspetta, sono confuso. Prima mi dici "assegnare a ciascun eseguibile di essere avviato come amministratore" e fino a qui ci siamo e poi "eliminare la richiesta di conferma", che conferma? Immagino dell'UAC ma sono due cose diverse.
Questo è il batch di cui parlavo prima:
: x_Master_x
@ECHO OFF
SET AdminFolder=C:\Test
REG QUERY "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"
IF %ERRORLEVEL% EQU 0 REG EXPORT "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "%Folder%\AdminFolder.reg"
FOR /R %AdminFolder% %%x IN (*.exe) DO (
REG ADD "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "%%x" /d "RUNASADMIN"
)
PAUSE
Da eseguire come amministratore. Tutti gli eseguibili in quella directory, comprese sottocartelle, verranno impostati per essere eseguiti come amministratore a prescindere dal tipo di manifest e senza utilizzo di collegamenti. Viene effettuato un backup della chiave di registro prima di agire per sicurezza.
Se il tuo scopo è avviare gli eseguibili come amministratore e allo stesso tempo non avere una conferma dell'UAC richiede l'utilizzo del Task Scheduler ed è necessario un collegamento al file, non è applicabile sull'.exe stesso.
Se il tuo scopo è avviare gli eseguibili come amministratore e allo stesso tempo non avere una conferma dell'UAC richiede l'utilizzo del Task Scheduler ed è necessario un collegamento al file, non è applicabile sull'.exe stesso.
Sì esatto, lo scopo è questo, cosa devo impostare tramite le attività pianificate?
x_Master_x
23-12-2016, 11:30
VBS da lanciare da CMD elevato come amministratore:
' x_Master_x
Set objFSO = CreateObject("Scripting.FileSystemObject")
objStartFolder = "C:\Test"
Set objFolder = objFSO.GetFolder(objStartFolder)
Set colFiles = objFolder.Files
For Each objFile in colFiles
If UCase(objFSO.GetExtensionName(objFile.name)) = "EXE" Then
ElevatedTask objFile.Name, objFile.Path
End If
Next
ShowSubfolders objFSO.GetFolder(objStartFolder)
Set objFSO = Nothing
Sub ShowSubFolders(Folder)
For Each Subfolder in Folder.SubFolders
Set objFolder = objFSO.GetFolder(Subfolder.Path)
Set colFiles = objFolder.Files
For Each objFile in colFiles
If UCase(objFSO.GetExtensionName(objFile.name)) = "EXE" Then
ElevatedTask objFile.Name, objFile.Path
End If
Next
ShowSubFolders Subfolder
Next
End Sub
Sub ElevatedTask(Filename, FilePath)
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "SCHTASKS /Create /TN " & AddQuotes(Filename) & " /TR " & AddQuotes("CMD /C START """""""""""" """ & AddQuotes(FilePath) & """") & " /RL HIGHEST /SC ONEVENT /EC Application /MO *[System/EventID=-1] /f", 0, True
Set Shortcut = objShell.CreateShortcut(objFSO.GetParentFolderName(objFile) & "\" & Left(Filename, Len(Filename) -4) & ".lnk")
Shortcut.TargetPath = "SCHTASKS"
Shortcut.Arguments = "/Run /TN " & AddQuotes(Filename)
Shortcut.IconLocation = FilePath
Shortcut.WindowStyle = "1"
Shortcut.Save
Set objShell = Nothing
End Sub
Function AddQuotes(strInput)
AddQuotes = Chr(34) & strInput & Chr(34)
End Function
Principio simile al .bat di prima. Per tutti gli eseguibili in quella directory, comprese sottocartelle, verrà creata una task ed un collegamento nella stessa cartella dell'.exe originale. Lanciando il collegamento il programma verrà avviato con diritti amministrativi senza prompt UAC
Per eliminare ogni task e collegamento un altro VBS sempre da CMD elevato:
' x_Master_x
Set objFSO = CreateObject("Scripting.FileSystemObject")
objStartFolder = "C:\Test"
Set objFolder = objFSO.GetFolder(objStartFolder)
Set colFiles = objFolder.Files
For Each objFile in colFiles
If UCase(objFSO.GetExtensionName(objFile.name)) = "EXE" Then
DeleteTask objFile.Name, objFile.Path
End If
Next
ShowSubfolders objFSO.GetFolder(objStartFolder)
Set objFSO = Nothing
Sub ShowSubFolders(Folder)
For Each Subfolder in Folder.SubFolders
Set objFolder = objFSO.GetFolder(Subfolder.Path)
Set colFiles = objFolder.Files
For Each objFile in colFiles
If UCase(objFSO.GetExtensionName(objFile.name)) = "EXE" Then
DeleteTask objFile.Name, objFile.Path
End If
Next
ShowSubFolders Subfolder
Next
End Sub
Sub DeleteTask(Filename, FilePath)
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "SCHTASKS /Delete /TN " & AddQuotes(Filename) & " /f", 0, True
Set Shortcut = objFSO.GetParentFolderName(objFile) & "\" & Left(Filename, Len(Filename) -4) & ".lnk"
If objFSO.FileExists(Shortcut) Then
objFSO.DeleteFile(Shortcut)
End If
Set objShell = Nothing
End Sub
Function AddQuotes(strInput)
AddQuotes = Chr(34) & strInput & Chr(34)
End Function
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.