Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1317627402
OW
2011-10-03 11:36
2012.01.22
Задумка. Игра Пираты. Интересно ли будет?


2-1318237920
NBAH1990
2011-10-10 13:12
2012.01.22
Программная настройка подключения по локальной сети


6-1250005013
NeonSimfi
2009-08-11 19:36
2012.01.22
Получить найстройки прокси изпользуя WinHttpGetProxyForUrl


15-1317709605
PS
2011-10-04 10:26
2012.01.22
Как запросить пароль?


2-1318359297
Gu
2011-10-11 22:54
2012.01.22
обработчик





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский