Форум: "Прочее";
Текущий архив: 2012.01.22;
Скачать: [xml.tar.bz2];
ВнизОбновление программы в Windows 7 Найти похожие ветки
← →
И. Павел © (2011-10-03 08:44) [0]Здравствуйте.
Моя программа лежит на компьютере пользователя и обновляется с сетевого диска таким образом:
1. Сначала моя программа запускает программу update.exe, которая находится на сетевом диске
2. Моя программа завершает работу
3. Программа update.exe заменяет exe
4. Программа update.exe запускает только что созданный у пользователя exe
5. Программа update.exe завершается
После установки windows7 у некоторых пользователей (причем, это никак не связано с тем, администратор он или нет) стало выскакивать окно контроля учетных записей с предупреждением, и вопросом, нужно ли "Разрешить внесение изменения данных на этом компьютере сторонней программе". Причем для разрешения, пользователю нужно ввести пароль администратора. Пользователю этот пароль неизвестен. Подскажите, пожалуйста, можно ли как-нибудь разрешить такое обновление без предупреждения пользователя?
Пока что есть идея - размещать update.exe на машине пользователя, но тогда в случае, если его нужно будет обновить, это вызовет сложности...
Другая идея - запускать программу update.exe в режиме администратора. Но это тоже не совсем правильно, и администраторы будут против.
Но мне все-таки кажется, что можно как-то настроить сетевой диск и компьютер пользователя, чтобы не переделывать программу.
Подскажите, пожалуйста, что нужно сделать, чтобы разрешить моей программе, запущенной с сетевого диска, выполнять обновление локального exe?
Заранее спасибо.
← →
Омлет © (2011-10-03 09:18) [1]> Сначала моя программа запускает программу update.exe, которая находится на сетевом диске
А почему не скопировать её на локальный диск и с него запускать?
← →
И. Павел © (2011-10-03 09:27) [2]> [1] Омлет © (03.10.11 09:18)
Пользователей сейчас много (примерно 1000). Придется обновлять update.exe через групповую политику. Кроме того, при любом обновлении update.exe придется тоже использовать политики. Но, скорее всего, придется сделать так.
Кроме того, у некоторых пользователей обновление выполняется нормально, хоть они даже не являются локальными администраторами на своем компьютере. А у некоторых локальных администраторов обновление не выполняется (хотя у других выполняется). Т.е., видимо, разные компьютеры настроены по разному. Хоть это и странно, т.к. настройки администраторы делают через групповые политики.
← →
Медвежонок Пятачок © (2011-10-03 09:47) [3]избавиться от update.exe и переложить ее функции на саму программу
← →
И. Павел © (2011-10-03 10:01) [4]> [3] Медвежонок Пятачок © (03.10.11 09:47)
> избавиться от update.exe и переложить ее функции на саму
> программу
Но как это сделать? Ведь тогда моя программа будет должна обновить свой собственный exe файл.
← →
Медвежонок Пятачок © (2011-10-03 10:13) [5]и чего?
← →
И. Павел © (2011-10-03 10:14) [6]> А почему не скопировать её на локальный диск и с него запускать?
Попробовал - не помогло. При попытке локальной программы Update.exe заменить локальный файл моей программы на файл из сетевой папки, выдается то же сообщение контроля учетных записей с требованием ввести пароль администратора...
Получается, что даже программно эту проблему решить у меня не получается. Надо полагать, что если хранить новую версию не на сетевом диске а в blob поле базы данных, ошибка будет такая же... Т.е. дело не в том, что программы расположены на сетевом диске. Дело в том, что контроль учетных записей не разрешает одной программе заменить исполнимый файо другой программы...
Помогите, пожалуйста! Можно ли как-то детально настроить контроль учетных записей? Администраторы говорят, что там только один параметр, который можно изменять...
← →
Медвежонок Пятачок © (2011-10-03 10:15) [7]качает обновление, сохраняет с темповым именем, запускает его.
при запуске прога видит, что называется не так, как написано в вершон инфо.
вместо главной формы показывает форму с инфой о текущей версии, о своей версии и с большой красной кнопкой "обновить".
при обновлении удаляем текущую версию, копируем себя с нормальным именем, запускаем себя нового а сами тихо закрываемся.
← →
И. Павел © (2011-10-03 10:16) [8]> и чего?
Не получается обновить exe файл программы, которая сейчас загружена. Поэтому я и использую update.exe как промежуточную программу.
Если есть другой вариант, пожалуйста, подскажите его.
← →
sniknik © (2011-10-03 10:25) [9]> Но как это сделать? Ведь тогда моя программа будет должна обновить свой собственный exe файл.
вариант
копируешь с временным именем, ну "New" например, говоришь что есть обновление и программу нужно пере-стартовать, при закрытии переименовываешь текущую в "Old" например (в принципе должно позволить, хотя хз. эту W7), а "New" в обычное, при старте смотришь если есть "Old" то удаляешь. все.
← →
И. Павел © (2011-10-03 10:27) [10]> [7] Медвежонок Пятачок © (03.10.11 10:15)
К сожалению, так тоже не работает, потому что при попытке заменить один exe другим опять вылетает сообщение контроля учетных записей... Не зависимо от того, находится заменяющий файл на сетевом диске или на локальном...
Хотя идея хорошая, спасибо - если удастся разрешить системе одновлять один exe другим, сделаю обновление без update.
← →
QAZ (2011-10-03 10:29) [11]о хоспади...
в какую папку установлена программа?
← →
И. Павел © (2011-10-03 10:29) [12]> [9] sniknik © (03.10.11 10:25)
К сожалению, как показывает тестирование - контроль учетных записей сейчас вообще не дает заменить один exe другим, даже находящимся в той же папке...
← →
sniknik © (2011-10-03 10:31) [13]> заменить один exe другим
заменить никогда не давало, переименовать... ну не знаю, в XP можно было (если вообще есть права на переименовку любого)
ты сначала попробуй. тест напиши что ли.
← →
И. Павел © (2011-10-03 10:31) [14]> [11] QAZ (03.10.11 10:29)
> о хоспади...
> в какую папку установлена программа?
На рабочем столе папка - Reader. Пользователь может там создавать, удалять и заменять файлы. А программа - нет... Копирование делаю через Windows. CopyFile(..., ..., false).
← →
sniknik © (2011-10-03 10:32) [15]> тест напиши что ли.
ну, например. вот это работает?
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
RenameFile(Application.ExeName, StringReplace(Application.ExeName, ".", "(1).", []));
end;
← →
Медвежонок Пятачок © (2011-10-03 10:35) [16]К сожалению, так тоже не работает, потому что при попытке заменить один exe другим опять вылетает сообщение контроля учетных записей... Не зависимо от того, находится заменяющий файл на сетевом диске или на локальном...
а как же я делаю это?
причем даже на вистах и даже не на корпоративных компах, на которых я никак не могу настроить уаки и прочие дела.
← →
QAZ (2011-10-03 10:36) [17]
> И. Павел © (03.10.11 10:31) [14]
рабочих столов бывает 2 вида, для каждого пользователя и общий для всех,соответствено и права доступа туда
← →
QAZ (2011-10-03 10:37) [18]
> А программа - нет...
какая ?
← →
И. Павел © (2011-10-03 10:43) [19]> sniknik © (03.10.11 10:32)
Верно, спасибо, тест показал, что простая замена одной программы другой выполняется. Т.е. контроль учетных записей ругается на другую операцию в update.exe. Буду тестировать.
← →
И. Павел © (2011-10-03 11:04) [20]Windows 7 не запускает программу update.exe, ругается на то, что программа неизвестного производителя может внести изменения на компьютер. Просит ввести пароль администратора.
Переименовал программу на tratata.exe. программа запустилась нормально.
Опять переименовал программу на update.exe - опять контроль безопасности хаподозрил угрозу.
В общем - в windows 7 внедрена новая нано-система безопасности. Если будут разрабатывать русскую OC нужно не забыть внедрить такой же подход к определению степени опасности программ по их имени :)
Всем спасибо. Если вы все еще используете свои программы с именами update.exe, рекомендую их переименовывать :)
← →
QAZ (2011-10-03 12:36) [21]
> нужно не забыть внедрить такой же подход к определению степени
> опасности программ по их имени :)
а ничего смешного нет,это для совместимости со старыми программами также как и setup,install
гораздо больше проблем былобы без этого
← →
Dennis I. Komarov © (2011-10-03 13:17) [22]update.exe -> service
← →
И. Павел © (2011-10-03 13:18) [23]
> update.exe -> service
Не совсем понял. Вы предлагаете сделать update.exe сервисом?
← →
Dennis I. Komarov © (2011-10-03 13:36) [24]
> сделать update.exe сервисом?
"точно да"...
← →
DiamondShark © (2011-10-03 13:41) [25]
> Windows 7 не запускает программу update.exe,
Попробуй назвать её есполняемый файл WinnieThePooh.exe
← →
И. Павел © (2011-10-03 13:45) [26]> Попробуй назвать её есполняемый файл WinnieThePooh.exe
Вам смешно, а я с этой ерундой 3 часа мучился :)
← →
Dennis I. Komarov © (2011-10-03 13:48) [27]
> И. Павел © (03.10.11 13:45) [26]
Почему обновление программы должно быть пользовательской прерогативой?
← →
И. Павел © (2011-10-03 13:48) [28]> Попробуй назвать её есполняемый файл WinnieThePooh.exe
Кстати, Касперский не ругается на WinnieThePooh.exe. Не переняли у microsoft-а методику судить о файлах по названию.
← →
И. Павел © (2011-10-03 13:58) [29]> Почему обновление программы должно быть пользовательской
> прерогативой?
У программ (в основном она одна, но есть еще довесок) 1000 пользователей. Автообновление очень удобное (во всяком случае, пока не решили, что перед обновлением программа должна пройти по нескольким инстанциям непонятно зачем...) Конечно, можно сделать групповую политику.
Но во-первых это потребует постоянного контроля администраторов (у меня прав администраторов нет), а контроля все равно не будет и повалятся жалобы от пользователей (так уже случилось с парой проектов).
Во-вторых - удобно, если пользователь может отказаться от не критичного обновления
В третьих - я могу сообщать пользователям, какие изменения внес в программу простым редактированием rtf файла, и они будут читать про это именно когда им понадобится запустить программу, а не при старте системы, к примеру.
← →
Dennis I. Komarov © (2011-10-03 15:30) [30]
> И. Павел © (03.10.11 13:58) [29]
Сервис имеет такие права. Если его правильно и гибко написать, решит все проблемы...
← →
Anatoly Podgoretsky © (2011-10-03 19:28) [31]> И. Павел (03.10.2011 08:44:00) [0]
На корню хочешь убить защиту.
← →
Anatoly Podgoretsky © (2011-10-03 19:31) [32]
> Не совсем понял. Вы предлагаете сделать update.exe сервисом?
Это хорошая вещь, именно так работают обновления от Микрософт.
← →
И. Павел © (2011-10-03 19:36) [33]
> Anatoly Podgoretsky © (03.10.11 19:28) [31]
Уже убил. Переименовал update.exe в obnovlenie.exe :) Если после меня программу будет сопровождать какой-нибудь любитель английского - обязательно исправит обратно - то-то удивится результату :) Нужно будет где-нибудь в справке про это упомянуть.
> Dennis I. Komarov © (03.10.11 15:30) [30]
Спасибо, попробую. Сейчас как раз планирую сервисами плотнее заняться. Хотя безопасники могут не одобрить идею постоянной работы сервиса на удаленной машине.
← →
Игорь Шевченко © (2011-10-03 20:13) [34]update, install, setup
http://ischevchenko.blogspot.com/2010/04/uac.html
← →
И. Павел © (2011-10-03 20:25) [35]
> Игорь Шевченко © (03.10.11 20:13) [34]
Спасибо. Скорее всего, попрошу администраторов отключить.
> Targeted sequences of bytes within the executable
Ужас. Вот в этом случае я бы точно причину ошибки никогда не нашел.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2012.01.22;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.004 c