Переименовать каталог в установщике - PullRequest
0 голосов
/ 21 ноября 2008

Я работаю над приложением Windows, которое должно иметь возможность самостоятельно обновляться. При нажатии кнопки запускается установщик, а затем родительское приложение закрывается. В какой-то момент во время установки программа установки пытается переименовать каталог, из которого выполнялось родительское приложение, и завершается неудачно с «Отказано в доступе». Если вы запускаете программу установки с рабочего стола, она работает.

Я использую CreateProcess для запуска установщика, есть ли какой-то способ использования этого или другого API для создания установщика полностью независимо от родительского приложения, чтобы он не сохранял некоторое вложение в каталог.

Ответы [ 3 ]

1 голос
/ 31 декабря 2008

Вы должны использовать обычную систему обновления в установщике Windows. сообщение об отказе в доступе появляется из-за того, что файл / каталог используется.

переименование каталогов тоже не очень хорошая идея. что произошло, если пользователь нажал «восстановить» или «удалить»?

вы можете запустить msi с помощью shellexec. после этого немедленно завершите приложение. Вы должны проверить в MSI, что ваше приложение больше не работает.

сделать обновление. если файл используется, установщик автоматически хочет перезагрузиться, чтобы заменить его.

1 голос
/ 22 апреля 2009

CreateProcess должен работать, если вы передаете ему правильные параметры. Ни в коем случае не ссылайтесь на родительский процесс и установите для большинства вещей значение NULL. Если это не сработает, попробуйте WinExec ().

1 голос
/ 30 декабря 2008

Я не уверен, что запуск установщика отдельно решит вашу проблему. Это больше похоже на проблему с разрешениями, которую вы могли бы решить, используя манипуляции ACL. Если у приложения еще нет разрешений для работы с этой папкой, возможно, вы сможете написать собственное действие для устранения проблемы, добавив необходимые разрешения для вашего процесса.

Другой способ сделать это - убедиться, что удаление каталога происходит в рамках пользовательского действия, которым вы управляете (например, вы владеете / поддерживаете код, который выполняет удаление, а не полагаетесь на MsiExec, чтобы сделать это за вас ). Затем установите это настраиваемое действие для запуска в контексте системы, чтобы оно имело те же разрешения, что и служба. Это должно предоставить вашему установщику достаточные права для удаления папки.

...