PDA

Visualizza versione completa : start /wait che "non wait" in Win7


retalv
31-12-2009, 00.14.37
Problema semplice da descrivere...

Questo file comandi...

---------------------------------------------------------
start /wait TakeOverHD.exe
echo.
echo Siamo passati oltre senza attendere la terminazione...
pause
---------------------------------------------------------

funziona come deve con UAC disabilitato, mentre...

con UAC abilitato NON attende la terminazione dell'applicativo TakeOverHD.exe.

Ora... il problema è risolvibile modificando il batch così....
---------------------------------------------------------
start /wait "%~dp0\TakeOverHD.exe"
echo.
echo Siamo passati oltre senza attendere la terminazione...
pause
---------------------------------------------------------
e lanciando il batch con tasto destro esegui come amministratore, ma conoscete un altro modo..?

RunAs non ha dato gli effetti sperati...

Semi.genius
31-12-2009, 09.32.20
Probabilmente perché TakeOverHD.exe ha un integrity level superiore rispetto a start. Perciò viene instanziato un processo "aumentato" di privilegi ma questo cambio di processo non viene rilevato da start.

Hai bisogno di un power toys.
http://technet.microsoft.com/en-us/magazine/2008.06.elevation.aspx

scarica quell'exe e installa su una cartella

e fai così

percorso_dove_l'hai_installato/Elevation/elevate.cmd "start /wait TakeOverHD.exe"

così che risultati ti dà?

retalv
31-12-2009, 11.30.45
Probabilmente perché TakeOverHD.exe ha un integrity level superiore rispetto a start. Perciò viene instanziato un processo "aumentato" di privilegi ma questo cambio di processo non viene rilevato da start.

...delfino curioso....!

Effettivamente TakeOverHD.exe è un eseguibile AutoIt con il preprocessing #RequireAdmin attivo, quindi potrebbe essere quello...

Anzi... era proprio quello... tolto #RequireAdmin e tutto fila liscio...

Grazie e ... happy new year!!!

cippico
31-12-2009, 18.12.29
Probabilmente perché TakeOverHD.exe ha un integrity level superiore rispetto a start. Perciò viene instanziato un processo "aumentato" di privilegi ma questo cambio di processo non viene rilevato da start.

Hai bisogno di un power toys.
http://technet.microsoft.com/en-us/magazine/2008.06.elevation.aspx

scarica quell'exe e installa su una cartella

e fai così

percorso_dove_l'hai_installato/Elevation/elevate.cmd "start /wait TakeOverHD.exe"

così che risultati ti dà?

ma quante ne sai...

scusate x intromissione...mi potresti spiegare in parole povere questa cosa?

ciaooo e buon anno a tutti voi... :)

retalv
01-01-2010, 06.53.59
scusate x intromissione...mi potresti spiegare in parole povere questa cosa?

Provo a spiegarlo come lo ho capito io...

Start lancia il processo x attendendo che questo temini, ma il processo x nel frattempo viene aumentato nei privilegi il che vuol dire che in qualche modo cambia faccia o viene duplicato con nuovi privilegi e terminata la vecchia istanza, quindi start, in entrambi i casi non trova l'istanza originaria ed interpreta il fatto come termine (se non lo è davvero, vedi secondo caso) e lascia proseguire lo script.

Nel mio caso togliendo l'istruzione di richesta privilegi amministrativi che ne modificava dinamicamente l'aspetto esterno lato sistema, tutto rifunziona.

Buon anno anche a te!

cippico
02-01-2010, 23.59.25
Provo a spiegarlo come lo ho capito io...

Start lancia il processo x attendendo che questo temini, ma il processo x nel frattempo viene aumentato nei privilegi il che vuol dire che in qualche modo cambia faccia o viene duplicato con nuovi privilegi e terminata la vecchia istanza, quindi start, in entrambi i casi non trova l'istanza originaria ed interpreta il fatto come termine (se non lo è davvero, vedi secondo caso) e lascia proseguire lo script.

Nel mio caso togliendo l'istruzione di richesta privilegi amministrativi che ne modificava dinamicamente l'aspetto esterno lato sistema, tutto rifunziona.

Buon anno anche a te!

...forse ho capito... :mm:

ti ringrazio... ;)

ciaooo

Semi.genius
03-01-2010, 11.20.21
Provo a spiegarlo come lo ho capito io...

Start lancia il processo x attendendo che questo temini, ma il processo x nel frattempo viene aumentato nei privilegi il che vuol dire che in qualche modo cambia faccia o viene duplicato con nuovi privilegi e terminata la vecchia istanza, quindi start, in entrambi i casi non trova l'istanza originaria ed interpreta il fatto come termine (se non lo è davvero, vedi secondo caso) e lascia proseguire lo script.

Nel mio caso togliendo l'istruzione di richesta privilegi amministrativi che ne modificava dinamicamente l'aspetto esterno lato sistema, tutto rifunziona.

Buon anno anche a te!

(Y)

Spiegando più precisamente. Vista ha un sistema di privilegio per quanto riguarda l'esecuzione di applicazioni. Questi sono implementati tramite i "mandatory integrity level". Esiste il livello basso(low), medio (medium), alto (high) e di sistema (system).

Se un eseguibile è associato un integrity level basso, non ha accesso alle cartelle di sistema in scrittura e viene virtualizzato in una sandbox (la cartella VirtualStore sotto AppData). Ad esempio, la modalità protetta di internet explorer fa questo.
Se si richeide un livello superiore, viene avvisato l'utente tramite (in)gloriosa finestra dell'UAC. Dopodiché, il processo viene incapsulato in un livello di integrità maggiore.
Questo meccanismo funziona con UAC attivato. Senza uac attivato, gli integrity level vengono ignorati e funziona "alla windows xp" tutti con integrity level alti e pieno accesso al sistema.

Nel caso in questione, se TakeOverHD ha pieno accesso al sistema, come mi pare di capire, l'integrity level deve venire aumentato. MA di defualt con UAC attivato, i processi di script vengono eseguiti con integrity level low se non si fa tasto destro-->Esegui come amministratore. Un procesos di livello Low non può vedere processi con un livello di integrity superiore. Perciò wait una volta fatto partire l'applicativo, rimane ad ascoltarlo finché non aumenta di privilegi.
Lo script in questione "elevate.cmd", fa eseguire uno VBscript che aumenta di privilegi un processo. In questo lo start in modo che possa vedere TakeOverHD.

cippico
03-01-2010, 18.22.45
ora ho capito meglio... :act:

grazie a tutti e ciaooo