У меня возникла следующая проблема. Вобщем, создал авторан для игры. Обычно для игрового авторана требуется три значения, а при должном умении (которого у меня пока нету) и одного
. Например, для Inno Setup:
[Registry]
Root: HKLM; Subkey: "Software\Painkiller"; Flags: uninsdeletekey
Root: HKLM; Subkey: "Software\Painkiller"; ValueType: string; ValueName: "Path"; ValueData: "{app}"
Root: HKLM; Subkey: "Software\Painkiller"; ValueType: string; ValueName: "Run"; ValueData: "{app}\Bin\PAINKILLER.EXE"
Root: HKLM; Subkey: "Software\Painkiller"; ValueType: string; ValueName: "Uninstall"; ValueData: "{uninstallexe}"
Так вот - в кнопке "Играть" в событии "On Click" я пишу следующее:
-- Проверяем наличие требуемого значения
value_names = Registry.GetValue(HKEY_LOCAL_MACHINE, "Software\\Painkiller", "Run", true);
if not (value_names ~= "") then
Dialog.Message("Ошибка запуска исходя из значений реестра", "Требуемый параметр присутствует, но он не содержит значения.\nДля запуска игры из меню следует переустановить ее заново.", MB_OK, MB_ICONEXCLAMATION, MB_DEFBUTTON1);
Application.Exit(0);
else
-- Определяем прямой путь к файлу, включая сам EXE-файл
registry_value = Registry.GetValue(HKEY_LOCAL_MACHINE, "Software\\Painkiller", "Run", true);
-- Определяем рабочую папку
registry_value2 = Registry.GetValue(HKEY_LOCAL_MACHINE, "Software\\Painkiller", "Path", true);
-- Запускаем файл, исходя из значений реестра
File.Run(registry_value, "", registry_value2 .."\\Bin", SW_SHOWNORMAL, false);
error = Application.GetLastError();
if (error ~= 0) then
Dialog.Message("Ошибка запуска исходя из значений реестра", "Файл для запуска по указанному пути в реестре не обнаружен.\nДля запуска игры из меню следует переустановить ее заново.", MB_OK, MB_ICONEXCLAMATION, MB_DEFBUTTON1);
Application.Exit(0);
end
end
Application.Exit(0);
Вся моя загвоздка в значении "registry_value2". С ним нет проблем, если главный исполняемый файл игры лежит в папке с игрой, а не в подпапке, как в данном случае. При нажатии считывается информация о рабочей папке. Инсталлятор прописал путь как, например: "D:\Painkiller BOOH", а сам экзешник находится в "D:\Painkiller BOOH\Bin". Как видите, пытаюсь дописать к существующему значению еще строку "Bin". Вроде так должно быть. Запускаю авторан - 1-ый раз запустил игру корректно, но на второй раз и далее игра не запустилась, показав лишь черный экран, что означает неверно заданную рабочую папку. Если ручками дописать в реестре рабочую папку (Path), то авторан без проблем будет запускать игру каждый раз. Но мне влом перекомпилить инсталлятор(ы), проще авторан подкорректировать. Так, собственно, какие могут быть еще варианты дописывания куска строки к считанному значению реестра? Или глюк программы. Но имейте ввиду, что тестировалась только эта игра, поэтому другая может без проблем запускаться. Для себя пока вижу один вариант - переделывать инсталлятор, дописывая еще одну строку "PathToExe".
p.s. сорри за большой пост