2012-08-07 4 views
3

je dois exécuter un fichier batch (setup.bat) qui fera appel à un autre fichier batch (make_dir.bat) qui va créer un dossier dans le répertoire « C: \ Program Files "répertoire. C'est pour un installateur interne. Tous les utilisateurs seront connectés avec leurs noms d'utilisateur mais auront des droits d'administrateur local. J'ai essayé deux approches mais aucune ne fonctionne.l'exécution d'un fichier de commandes à partir d'un autre fichier batch comme admisitrator

Approche 1:

SET PRGFILES=%programfiles%\mySoftware 
SET admin=N 
SET domain=%USERDOMAIN%\ 
IF /i "%domain%" EQU "%computername%\" set domain= 
SET user=%domain%%username% 
FOR /f "Tokens=*" %%a IN ('net localgroup administrators^|find /i "%user%"') DO SET admin=Y 
IF "%admin%"=="Y" (
    MD "%PRGFILES%" 
) 

Ce dit Access is denied

Approche 2:

runas /user:%Username% shell\make_dir.bat 

où make_dir.bat est

md "%programfiles%\mySoftware" 

Cela demande l'utilisation actuelle rname et mot de passe mais en quelque sorte échoue après cela. J'ai vérifié que tous les utilisateurs ont des droits d'administrateur local et peuvent créer manuellement un dossier dans leur dossier programfiles.

Merci pour l'aide.

Répondre

2

-je utiliser ce script pour exécuter .bat fichier en tant qu'administrateur, en utilisant JScript:

 
var batch = "fixuac.bat" 

var fso = new ActiveXObject("Scripting.FileSystemObject"); 
var curdir = fso.GetParentFolderName(WScript.ScriptFullName); 

var wbemFlagReturnImmediately = 0x10; 
var wbemFlagForwardOnly = 0x20; 
var objWMIService = GetObject("winmgmts:\\\\.\\root\\CIMV2"); 
// var objWMIService = GetObject("winmgmts:" + "{impersonationLevel=impersonate}!\\" + "." + "\root\cimv2"); 
var colItems = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", 
             wbemFlagReturnImmediately | wbemFlagForwardOnly); 
var enumItems = new Enumerator(colItems); 
var objItem = enumItems.item(); 
// http://en.wikipedia.org/wiki/Ver_(command) 
var major_ver = objItem.Version.split(".")[0]; 

var objShell = new ActiveXObject("shell.application"); 
// http://msdn.microsoft.com/en-us/library/windows/desktop/gg537745.aspx 
//     Shell.ShellExecute method 
// iRetVal = Shell.ShellExecute(sFile, [ vArguments ], [ vDirectory ], [ vOperation ], [ vShow ]) 
// If (vShow==1) open the application with a normal window. 
// Check for Vista and upper. 
if (major_ver >= 6) { 
    // Request admin permission. 
    objShell.ShellExecute(batch, curdir, "", "runas", 1); 
} else { 
    objShell.ShellExecute(batch, curdir); 
} 
+0

Il fonctionne pour Vista et plus. Windows XP certains comment ont des problèmes, ne me souviens pas exactement que ... – gavenkoa

+0

utilisateur sera invité à autoriser admin (OUI/NON dialogue) ... – gavenkoa

Questions connexes