Попробуйте следующее:
[Registry]
Root: HKCU; Subkey: "Environment"; ValueType:string; ValueName: "VARIABLE_NAME"; \
ValueData: "new_value"; Flags: preservestringtype
Возможно, вам придется добавить это:
[Setup]
; Tell Windows Explorer to reload the environment
ChangesEnvironment=yes
Альтернативно попробуйте:
[Run]
Filename: "{app}\MyProg.exe"; BeforeInstall: SetEnvPath
[Code]
#ifdef UNICODE
#define AW "W"
#else
#define AW "A"
#endif
function SetEnvironmentVariable(lpName: string; lpValue: string): BOOL;
external 'SetEnvironmentVariable{#AW}@kernel32.dll stdcall';
procedure SetEnvPath;
begin
if not SetEnvironmentVariable('VARIABLE_NAME', 'new_value') then
MsgBox(SysErrorMessage(DLLGetLastError), mbError, MB_OK);
end;
Ссылка : Часто задаваемые вопросы по Inno Setup - Настройка переменных среды
Если изменение переменной не распространяется (см. Неверная переменная среды [недоступна] для программ [Запуск] в Inno Setup )
[Run]
...; AfterInstall: RefreshEnvironment
[Code]
const
SMTO_ABORTIFHUNG = 2;
WM_WININICHANGE = $001A;
WM_SETTINGCHANGE = WM_WININICHANGE;
type
WPARAM = UINT_PTR;
LPARAM = INT_PTR;
LRESULT = INT_PTR;
function SendTextMessageTimeout(hWnd: HWND; Msg: UINT;
wParam: WPARAM; lParam: PAnsiChar; fuFlags: UINT;
uTimeout: UINT; out lpdwResult: DWORD): LRESULT;
external 'SendMessageTimeoutA@user32.dll stdcall';
procedure RefreshEnvironment;
var
S: AnsiString;
MsgResult: DWORD;
begin
S := 'Environment';
SendTextMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
PAnsiChar(S), SMTO_ABORTIFHUNG, 5000, MsgResult);
end;
Подробнее:
Inno Setup: настройка переменной системной среды
В более современных (другими словами, правильных) операционных системах, таких как Windows 2000, XP и Windows 2003 Server, переменные среды хранятся в реестре под следующим ключом:
HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ Session Manager \ Environment
Переменные добавляются путем создания нового значения под этим ключом или путем изменения значения, если оно уже существует. Чтобы удалить переменную, вы просто удаляете ее значение реестра, если только вы не удаляете часть расширенного значения, например PATH, и в этом случае вы удаляете только часть, которую вы хотите.
На этом этапе Windows будет не забывайте об изменениях, если вы не выходите из системы или не перезагружаетесь. Чтобы обойти это, SetEnv будет транслировать WM_SETTINGCHANGE для всех окон в системе. Это позволяет другим запросам приложений, например Explorer.exe, получать уведомления об изменениях. Если вы запустите SetEnv из командной строки, это не будет обновлять переменную среды для текущего окна DOS. Это связано главным образом с тем, что процесс (SetEnv) не может изменить среду своего родителя (Командная строка). Тем не менее, любые новые DOS / командные подсказки, которые вы открываете, будут отображать новую переменную / значение.
blockquote>
Ваше сообщение об ошибке гласит следующее:
Нет доступного квалифицирующего компонента типа de.zipcode.view.mapper.ZipCodeMapper: ожидается как минимум 1 компонент, который считается кандидатом на автопровод. ] blockquote>
Таким образом, проблема здесь:
@Autowired @Qualifier("delegate") public void setDelegate(PersonMapper delegate) { this.delegate = delegate; }
Вы пытаетесь выполнить автоматическое подключение в PersonMapper, но не указали bean-компонент, который соответствует требованиям. Вам необходимо настроить
.@Bean
дляPersonMapper
, чтобы Spring мог внедрить его или аннотировать вашPersonMapper
(или класс, который его расширяет) с помощью@Component
(или любого расширяющего стереотипа)
РЕШЕНА ПРОБЛЕМА
Проблема была в том, что я не писал
(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.ERROR)
В каждом картографе, который я пытался использовать!
Теперь я перестраиваю и я начал проект :)