tavria2

Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору vic499 Цитата: В этом варианте кода происходит только установка первого файла и больше ничего. Ни перегрузки компа, ни запуска второго файла. | Только, что проверил, перезагрузка проходит нормально, а автозапуск второго файла здесь и не предусмотрен, т.к. ты дал не достаточно информации что и для чего..., при "ручном" запуске проекта, после перезагрузки, будет запущен второй файл. Цитата: Дело в том, что я не уверен правильно ли я указываю путь к файлу. Файл находится на болванке и путь к нему может меняться в зависимости от того в какой привод он вставлен "F" "G" или "H". | Здесь скорее всего проблема в путях - необходимо использовать относительный путь, т.е. путь необходимо указать относительно исполняемого файла проекта (autorun.exe). В AMS есть зарезервированная глобальная переменная _SourceFolder, возвращающая путь к исполняемому файлу проекта (autorun.exe). Но есть нюанс, если сборка проекта выполнена в режиме "Web/Email executable", которая по сути будет представлять самараспаковывающийся архив (SFX), а необходимые для запуска файлы не включены в сборку, то при запуске SFX-архива он будет распакован во временную папку и соответственно _SourceFolder вернет путь ко временной папке, а не к папке откуда был запущен SFX-архив и мы не сможем построить относительный путь к нашим файлам. Для решения этой проблемы нужно использовать ф-цию которая будет возвращать путь к SFX-архиву. Код: -- Ф-ция определяющая путь к SFX-архиву function GetSFXPath() local cPath = ""; -- путь local cArg = _CommandLineArgs[1]; -- параметр коммандной строки if cArg then -- есть параметр cPath = String.Right(cArg, String.Length(cArg) - 10); -- выделяем путь из параметра if (String.Length(cPath) > 0) then -- есть путь tPath = String.SplitPath(cPath); -- разлаживаем путь на составляющие cPath = tPath.Drive..tPath.Folder; -- полный путь без имени файла if (String.Right(cPath, 1)=="\\") then -- есть завершающий слэш cPath = String.Mid(cPath, 1, String.Length(cPath)-1); -- удаляем завершающий слэш end _SourceFolder = cPath; -- переназначаем путь в зарезервированной переменной end end end GetSFXPath(); -- вызов ф-ции File.Run(_SourceFolder.."\\WMP\\wmfdist11.exe", "", "", SW_SHOWNORMAL, true); cFullPath = _SourceFolder.."\\WMP\\wmp11.exe"; Registry.SetValue(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce", "MyValue", cFullPath, REG_SZ); System.Reboot(); | Примечание: Если сборка проекта была выполнена в режиме "Web/Email executable" и файлы для запуска всеже включены в сборку, тогда необходимо убрать вызов ф-ции GetSFXPath(), а также саму ф-цию. | Всего записей: 1127 | Зарегистр. 19-01-2005 | Отправлено: 21:43 02-12-2006 | Исправлено: tavria2, 21:54 02-12-2006 |
|