Я хочу создать точки восстановления системы в моем установщике NSIS 2.46. Я погуглил и обнаружил, что плагин SysRestore - лучший выбор.

Я загрузил SysRestore.zip с http://nsis.sourceforge.net/SysRestore_plug-in, разархивировал и скопировал в установочную папку NSIS. Но даже поставляемый пример (\Examples\SysRestore\example.nsi) не может правильно скомпилироваться.

Журнал показан ниже:

MakeNSIS v2.46 - Copyright 1995-2009 Contributors
See the file COPYING for license details.
Credits can be found in the Users Manual.

Processing config: 
Processing plugin dlls: "C:\Program Files (x86)\NSIS\Plugins\*.dll"
 - AdvSplash::show
 - Banner::destroy
 - Banner::getWindow
 - Banner::show
 - BgImage::AddImage
 - BgImage::AddText
 - BgImage::Clear
 - BgImage::Destroy
 - BgImage::Redraw
 - BgImage::SetBg
 - BgImage::SetReturn
 - BgImage::Sound
 - Dialer::AttemptConnect
 - Dialer::AutodialHangup
 - Dialer::AutodialOnline
 - Dialer::AutodialUnattended
 - Dialer::GetConnectedState
 - InstallOptions::dialog
 - InstallOptions::initDialog
 - InstallOptions::show
 - LangDLL::LangDialog
 - Math::Script
 - NSISdl::download
 - NSISdl::download_quiet
 - Splash::show
 - StartMenu::Init
 - StartMenu::Select
 - StartMenu::Show
 - System::Alloc
 - System::Call
 - System::Copy
 - System::Free
 - System::Get
 - System::Int64Op
 - System::Store
 - TypeLib::GetLibVersion
 - TypeLib::Register
 - TypeLib::UnRegister
 - UserInfo::GetAccountType
 - UserInfo::GetName
 - UserInfo::GetOriginalAccountType
 - VPatch::GetFileCRC32
 - VPatch::GetFileMD5
 - VPatch::vpatchfile
 - nsDialogs::Create
 - nsDialogs::CreateControl
 - nsDialogs::CreateItem
 - nsDialogs::CreateTimer
 - nsDialogs::GetUserData
 - nsDialogs::KillTimer
 - nsDialogs::OnBack
 - nsDialogs::OnChange
 - nsDialogs::OnClick
 - nsDialogs::OnNotify
 - nsDialogs::SelectFileDialog
 - nsDialogs::SelectFolderDialog
 - nsDialogs::SetRTL
 - nsDialogs::SetUserData
 - nsDialogs::Show
 - nsExec::Exec
 - nsExec::ExecToLog
 - nsExec::ExecToStack

!define: "MUI_INSERT_NSISCONF"=""

Changing directory to: "C:\Users\Administrator\Downloads\SysRestore\Examples\SysRestore"

Processing script file: "C:\Users\Administrator\Downloads\SysRestore\Examples\SysRestore\example.nsi"
Name: "System Restore Example"
OutFile: "Example.exe"
InstallDir: "$PROGRAMFILES\$(^Name)\"
ShowInstDetails: Show
ShowUninstDetails: Show
Page: Directory
Page: InstFiles
UninstPage: UninstConfirm
UninstPage: InstFiles
Var: "Error"
Section: "install"
SetOverwrite: try
StrCpy $Error "0" () ()
DetailPrint: "Setting System Restore point..."
Invalid command: SysRestore::StartRestorePoint
Error in script "C:\Users\Administrator\Downloads\SysRestore\Examples\SysRestore\example.nsi" on line 20 -- aborting creation process

Насколько мне известно, подключаемый модуль NSIS должен предоставлять файл .nsh для включения в сценарий .nsi. Заголовок include предоставит определения таких функций, как SysRestore::StartRestorePoint. Так что компилятор не будет жаловаться на это.

Но я не нашел .nsh в папке SysRestore. Что не так с этим плагином? Или в моем использовании чего-то не хватает?

Благодарность!

0
Yang Luo 29 Фев 2016 в 11:46

2 ответа

Лучший ответ

Вы не можете просто скопировать папки из извлеченного архива, поскольку он использует файловую структуру NSIS 3.x для плагинов. Тем не менее, копирование папок для документации и примеров - это нормально.

При использовании NSIS 2.x убедитесь, что Plugins\x68-ansi\SysRestore.dll скопирован в %PROGRAMFILES%\NSIS\Plugins.

2
idleberg 29 Фев 2016 в 12:48

Посмотрите на это сообщение времени компиляции и следующие строки:

Processing plugin dlls: "C:\Program Files (x86)\NSIS\Plugins\*.dll"

SysRestore :: StartRestorePoint не отображается в списке загруженных плагинов. Вы скопировали SysRestore.dll в папку Plugins? Если вы только что извлекли его в другую папку, вам нужно использовать !addplugindir и включить эту папку.

0
Francisco R 29 Фев 2016 в 09:12