Alberto Silva

Um blog sobre mobilidade, desenvolvimento para plataformas Windows Mobile e os obrigatórios Off-topic!

This Blog

Syndication

Search

Tags

News

  • Você escolheu um software de gestão que se adapta ao seu negócio... Porque há-de deixar que lhe imponham uma solução de mobilidade para as suas forças de venda? Contacte a moving2u e teremos todo o prazer em lhe apresentar as nossas soluções!


    Grab this badge here!

Community

Email Notifications

Archives

Eventos

Desenvolvimento .net CF

Mobilidade em Português...

Sobre mim...

Executar um ficheiro batch como Administrador sem mudar a pasta de trabalho…

No meu PC com Windows Vista e o UAC ligado, ao instalar uma actualização de uns controlos da Resco, executando o ficheiro .bat fornecido, obtinha a mensagem ‘Access Denied’ por cada ficheiro que o ficheiro batch tentava copiar para uma subpasta abaixo da pasta C:\Program Files. Este é o ficheiro:

@ECHO OFF

REM This script copies the libraries to default folders.
REM Change the paths in case the programs are installed in non-default folders.

REM Compact Framework libraries:

SET MFT2008=%programfiles%\Resco MobileForms Toolkit 2009\NET35
SET PRODUCT=AdvancedList

copy .\Full\CF\Resco.%PRODUCT%.CF3.dll "%MFT2008%\CF\Resco.%PRODUCT%.CF3.dll"
copy .\Full\CF\Resco.%PRODUCT%.CF3.XML "%MFT2008%\CF\Resco.%PRODUCT%.CF3.XML"

copy .\Full\CF\DesignerMetadata\Resco.%PRODUCT%.Design.dll "%MFT2008%\CF\DesignerMetadata\Resco.%PRODUCT%.Design.dll"
copy .\Full\CF\DesignerMetadata\Resco.%PRODUCT%.CF3.PocketPC.asmmeta.dll "%MFT2008%\CF\DesignerMetadata\Resco.%PRODUCT%.CF3.PocketPC.asmmeta.dll"
copy .\Full\CF\DesignerMetadata\Resco.%PRODUCT%.CF3.WindowsCE.asmmeta.dll "%MFT2008%\CF\DesignerMetadata\Resco.%PRODUCT%.CF3.WindowsCE.asmmeta.dll"
copy .\Full\CF\DesignerMetadata\Resco.%PRODUCT%.CF3.Smartphone.asmmeta.dll "%MFT2008%\CF\DesignerMetadata\Resco.%PRODUCT%.CF3.Smartphone.asmmeta.dll"

copy .\Full\Desktop\Resco.%PRODUCT%.dll "%MFT2008%\Desktop\Resco.%PRODUCT%.dll"
copy .\Full\Desktop\Resco.%PRODUCT%.XML "%MFT2008%\Desktop\Resco.%PRODUCT%.XML"

copy .\Full\Desktop\%PRODUCT%Designer.exe "%MFT2008%\Desktop\%PRODUCT%Designer.exe"

rem "%ProgramFiles%\Microsoft SDKs\Windows\v6.0A\bin\gacutil.exe" /i "%MFT2008%\CF\DesignerMetadata\Resco.%PRODUCT%.Design.dll" /f

PAUSE

Fácil, pensei eu, basta correr isto como administrador e resolve-se o problema.

Ao fazê-lo, cada uma daquelas mensagens ‘Access Denied’ transformou-se em ‘File not found’… humpf… verifiquei o ficheiro .bat, fiz umas modificações, mas o problema persistia e não havia razão para os ficheiros não serem encontrados. Aí lembrei-me de acrescentar um simples ‘dir’ ao início do ficheiro batch e ao corrê-lo normalmente devolveu-me o conteúdo da pasta de onde eu chamava o ficheiro, mas ao corrê-lo como administrador, o dir devolveu-me o conteúdo da pasa C:\Windows\System32!!! Aqc… (tradução livre do inglês wtf…)

Experimentei o RunAs entre outras coisas, sempre sem sucesso, até que me lembrei que não devia ser a primeira alma a encontrar este problema e uma pesquisa na internet devolveu-me esta preciosa página…

http://www.vistax64.com/vista-security/79008-elevate-without-losing-working-directory.html

…após o que alterando o ficheiro inicial para este novo (alterações destacadas), passei a poder executá-lo como administrador, mantendo como ‘working folder’ a pasta de onde o ficheiro batch é chamado:

@ECHO OFF

REM This script copies the libraries to default folders.
REM Change the paths in case the programs are installed in non-default folders.

REM Compact Framework libraries:

SET MFT2008=%programfiles%\Resco MobileForms Toolkit 2009\NET35
SET PRODUCT=AdvancedList

setlocal enableextensions
cd /d "%~dp0"

copy .\Full\CF\Resco.%PRODUCT%.CF3.dll "%MFT2008%\CF\Resco.%PRODUCT%.CF3.dll"
copy .\Full\CF\Resco.%PRODUCT%.CF3.XML "%MFT2008%\CF\Resco.%PRODUCT%.CF3.XML"

copy .\Full\CF\DesignerMetadata\Resco.%PRODUCT%.Design.dll "%MFT2008%\CF\DesignerMetadata\Resco.%PRODUCT%.Design.dll"
copy .\Full\CF\DesignerMetadata\Resco.%PRODUCT%.CF3.PocketPC.asmmeta.dll "%MFT2008%\CF\DesignerMetadata\Resco.%PRODUCT%.CF3.PocketPC.asmmeta.dll"
copy .\Full\CF\DesignerMetadata\Resco.%PRODUCT%.CF3.WindowsCE.asmmeta.dll "%MFT2008%\CF\DesignerMetadata\Resco.%PRODUCT%.CF3.WindowsCE.asmmeta.dll"
copy .\Full\CF\DesignerMetadata\Resco.%PRODUCT%.CF3.Smartphone.asmmeta.dll "%MFT2008%\CF\DesignerMetadata\Resco.%PRODUCT%.CF3.Smartphone.asmmeta.dll"

copy .\Full\Desktop\Resco.%PRODUCT%.dll "%MFT2008%\Desktop\Resco.%PRODUCT%.dll"
copy .\Full\Desktop\Resco.%PRODUCT%.XML "%MFT2008%\Desktop\Resco.%PRODUCT%.XML"

copy .\Full\Desktop\%PRODUCT%Designer.exe "%MFT2008%\Desktop\%PRODUCT%Designer.exe"

rem "%ProgramFiles%\Microsoft SDKs\Windows\v6.0A\bin\gacutil.exe" /i "%MFT2008%\CF\DesignerMetadata\Resco.%PRODUCT%.Design.dll" /f

PAUSE

Mais um stress resolvido… NEXT!!!

[Corrigdo em 8/Abril conforme comentários abaixo]

Published Tue, Apr 7 2009 14:53 by Alberto Silva
Filed under:

Comments

# re: Executar um ficheiro batch como Administrador sem mudar a pasta de trabalho…@ Wednesday, April 08, 2009 8:39 AM

Alberto, eu até estou com uma gripe considerável, mas se os meus olhos não me enganam, as linhas que destacaste no segundo bloco, encontram-se também no primeiro... :)

# re: Executar um ficheiro batch como Administrador sem mudar a pasta de trabalho…@ Wednesday, April 08, 2009 10:26 AM

LOL!

Copiei a solução para os 2 locais e esqueci-me de remover as linhas para o batch inicial ficar como o original :)

Obrigado pelo reparo, vou corrigir, e entretanto votos de melhoras para essa gripe!

Leave a Comment

(required) 
(required) 
(optional)
(required)