2016-09-26 2 views
4

Я пишу приложение, которое использует командный файл для копирования некоторых файлов в другое место. Я использую 64-разрядные окна 7.Копирование файла из локальной папки в папку «C: Windows System32 » с использованием командного файла

Я попросил права администратора тоже используя код ниже:

код блока, чтобы получить ADMIN право:

@echo off 
:: BatchGotAdmin (Run as Admin code starts) 
REM --> Check for permissions 
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" 
REM --> If error flag set, we do not have admin. 
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges... 
    goto UACPrompt 
) 
else (goto gotAdmin) 
:UACPrompt 
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" 
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs" 
"%temp%\getadmin.vbs" 
exit /B 
:gotAdmin 
if exist "%temp%\getadmin.vbs" (del "%temp%\getadmin.vbs") 
pushd "%CD%" 
CD /D "%~dp0" 
:: BatchGotAdmin (Run as Admin code ends) 
:: Your codes should start from the following line 

код, чтобы скопировать файл в папке system32:

copy /d /Y "D:\opt\optPath.txt" "C:\Windows\System32\" 

Там нет ошибки в операции копирования, но е ile скопирован в "C: \ Windows \ SysWOW64" автоматически. Нужна помощь.

+1

Вы запускаете 'команду copy' с командным интерпретатором 32-битной, и в связи с [WoW64] (https: // MSDN .microsoft.com/en-us/library/windows/desktop/aa384187 (v ​​= vs.85) .aspx), он заканчивается в текущем местоположении. Как вы его начинаете? – CristiFati

+0

Вы используете 32-битную программу - это 32-битный каталог System32. 'C: \ Windows \ SysNative' позволяет 32-битным программам обращаться к 64-битной системе32. Windows использует 64-битные программы, если вы ничего не сделали. Поместите «cmd/c copy/d/y» D: \ opt \ optPath.txt «C: \ Windows \ SysNative \ *. *" В ярлык, а затем установите его как «Запуск от имени администратора» (щелкните правой кнопкой мыши - «Свойства» - ярлык tab - кнопка «Дополнительно» и отметьте «Запуск от имени администратора» или скопируйте файл в vbscript «CreateObject» («Scripting.FileSystemObject»). CopyFile «D: \ opt \ optPath.txt», «C: \ Windows \ SysNative \ optPath.txt» , True' –

+0

@Alex. Пакетные файлы уже 64 бит, если вы не делаете что-то странное. –

ответ

1

Попробуйте использовать:

@echo off 
:: Batch-Admin API 
    net file>nul 2>&1&&if "%~1"=="64" (goto:GotAdmin) else (if exist "%windir%\Sysnative\" (call start %windir%\Sysnative\cmd /c "%~0" 64&exit) else (goto:GotAdmin)) 
    echo Requesting administrative privileges... 
    (echo Set UAC = CreateObject^("Shell.Application"^) 
    echo UAC.ShellExecute "%~s0", "ELEV","", "runas", 0) > "%temp%\admin.vbs" 
    cscript /Nologo "%temp%\admin.vbs"&exit 

:GotAdmin 
:: Place ADMIN tasks below 
    copy /d /Y "D:\opt\optPath.txt" "C:\Windows\System32\" 
    pause 
exit 

Я модифицированного переписал сценарий для:

  • Используйте альтернативный способ для проверки прав доступа администратораnet file && echo Admin || echo No-admin
  • Добавлена ​​64-битной пусковыхVBScript запускает все как 32-bit (перенаправление C:\Windows\System32 на C:\Windows\SysWOW64).

64-Bit пусковая: call start %WinDir%\SysNative\cmd /c %0 (Это окно скрыто)

Смежные вопросы