Копия файла установщика NSIS, не работающего в Windows 7, но работающего в Windows XP

#windows-7 #installation #windows-xp #nsis #file-copying

#windows-7 #установка #windows-xp #nsis #копирование файлов

Вопрос:

Я использую файловую копию установщика NSIS для копирования папки вместе со всеми ее вложенными файлами из источника в пункт назначения. Это работает в XP, но не в Windows 7. Когда я запускаю установщик в Windows 7, диалоговое окно FileCopy даже не появляется, оно просто пропущено. Но в Windows XP он правильно отображает диалоговое окно «Копирование файлов» и завершается успешно. В чем проблема? Пожалуйста, помогите.

 !define FileCopy `!insertmacro FileCopy`
!macro FileCopy FilePath TargetDir
  CreateDirectory `${TargetDir}`
  CopyFiles `${FilePath}` `${TargetDir}`
!macroend

   ${FileCopy} 'C:ACCBK*.*' '$INSTDIRACCBK'
  

Комментарии:

1. Возможно, для этого требуются права администратора. Вы пробовали запускать его с опцией «Запуск от имени администратора»?

2. как это сделать? кроме того, если я не хочу устанавливать эту проверку пользователей, то как ее удалить?

3. Вы пробовали использовать подключаемый модуль UAC? nsis.sourceforge.net/UAC_plug-in

4. @Cosmin Pirvu : как это сделать? кроме того, если я не хочу устанавливать эту проверку пользователей, то как ее удалить? я имею в виду, любой пользователь может запустить установщик, тогда что делать?? пожалуйста, помогите с кодом, сэр.

5. я не хочу использовать какой-либо плагин, я просто хочу, чтобы filecopy работал как на Windows 7, так и на XP, в настоящее время он работает на XP, но не на 7, даже если я вошел в систему через администратора?

Ответ №1:

Чтобы убедиться, что установщик запускается от имени администратора, используйте этот код:

 RequestExecutionLevel admin ;Require admin rights on NT6  (When UAC is turned on)

!include LogicLib.nsh

Function .onInit
UserInfo::GetAccountType
pop $0
${If} $0 != "admin" ;Require admin rights on NT4 
    MessageBox mb_iconstop "Administrator rights required!"
    SetErrorLevel 740 ;ERROR_ELEVATION_REQUIRED
    Quit
${EndIf}
FunctionEnd
  

Если это проблема, это означает, что на самом деле она была сломана и в XP (на самом деле, в любой версии NT), вы просто забыли протестировать как не-администратор.

CopyFiles просто вызывает SHFileOperation, но, конечно, могут быть некоторые критические изменения между XP и Vista …

Комментарии:

1. @Anders: сэр, я хочу, чтобы любой мог запустить установщик, любой пользователь или администратор

2. кроме того, код, который я упомянул в сообщении, я выполнил в Windows 7 как администратор, после чего также произошла ошибка при копировании файла.

3. для любого, кто запускает установщик, какой код я должен упомянуть, сэр? пожалуйста, помогите

4. @sqlchild: только администраторы могут выполнять запись в $ windir, $ programfiles и HKLM

5. @Anders: сэр, я не записываю ни в одну из этих папок? тогда это должно сработать, но почему не копируются файлы в Windows 7