2009-02-18 9 views
3

Я работаю над приложением vb6, которое имеет проблемы с Vista, по очевидным причинам (запись в файлы программы и другие вещи, которые по умолчанию больше не разрешены).Как обновить приложение VB6 от XP до Vista?

  • Где я могу хранить данные приложения или сохраненные файлы пользователя?
  • Нужны ли мне привилегии для создания папок и файлов?
  • Какие другие распространенные действия могут вызвать проблемы?
  • В программе есть программа обновления, которая должна загружать и регистрировать файлы, как я могу повысить привилегии, когда это происходит?

Некоторые из этих вопросов имеют очевидные ответы, но я хочу получить очевидное право.

+0

Я думаю, вы будете удивлены тем, что «разрешено по умолчанию» в xp для пользователей, которые не являются админами. Запустите его в xp как стандартный пользователь, и он, вероятно, тоже не будет работать. –

+0

Правда, но это никогда не было проблемой, потому что никто не работал как обычный пользователь. К сожалению, очень часто для программ предполагалось, что пользователь был администратором, и я рад, что Microsoft наконец-то объединилась в этом вопросе. –

ответ

4

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

1) Где хранить данные приложения или сохраненные файлы пользователя?

Это зависит от того, что вы хотите делать. Если вы хотите их для каждого пользователя, хранить их в пользователях/AppData, если вы хотите их для всех пользователей, хранить их в Common/AppData

If SHGetFolderPath(0, CSIDL_COMMON_APPDATA, -1, SHGFP_TYPE_CURRENT, sTempPath) = 0 Then 
     sCommonAppdata = Left$(sTempPath, InStr(1, sTempPath, Chr(0)) - 1) & "CompanyName\AppName" 
    End If 

Изменить что CSIDL_APPDATA для пользователей каталога AppData. Примечание. Эти карты полностью разные места в файловой системе для XP и Vista, поэтому, когда вы отлаживаетесь, подготовьтесь к просмотру в разных местах.

2) Нужны ли мне привилегии для создания папок и файлов там тоже?

Вам нужен доступ Adminsitrator для записи всего в Program Files, если это вообще возможно, не делайте этого! Мы в настоящее время running into issues, что API для VB и стандартный API ведут себя по-разному в файлах в Program Files.

3) Какие еще общие действия могут вызвать проблемы?

Есть много скрытых ошибок. Чтобы назвать несколько, вы не можете общаться через IPC или Named Pipes с другими приложениями (у нас есть Служба, с которой мы разговаривали с помощью значка уведомлений на лоток, и это должно было быть полностью переписано). Все, что вы видите, уведомление UAC очень сложно. Кроме того, вы не можете писать ничего в реестре в LOCAL_MACHINE без администратора, поэтому вам нужно либо привязываться к LOCAL_USER, либо повышать учетные данные (см. Ниже).

4) У программы есть программа обновления, которая должна загружать и регистрировать файлы, как я могу повысить привилегии (sic), когда это произойдет?

Удачи вам в этом, я настоятельно рекомендую вам не записывать его в VB6, как я уже сказал, файл api VB6, похоже, имеет доступ к файлам, отличным от стандартных API. Если вам нужно повысить привилегии, см. Это post, что кто-то любезно помог мне.

+0

Согласно одной из статей в других ответах, ваша папка-фантом находится в папке C: \ Virtual Store \ SID \ Program Files \ .. –

+0

Если вы написали программу на C и допустили те же ошибки, ваша программа «с использованием стандартных API» увидит такое же поведение. Это не проблема VB6, но отказ в объявлении Vista Vista. Речь идет о виртуализации файловой системы appcompat, которая применяется к устаревшей программе. Это было задокументировано разработчиками задолго до выхода Vista. – Bob

0

В порядке сортировки turning off UAC и установка ActiveX installer server поможет. В долгосрочной перспективе вам нужно поместить данные и информацию о конфигурации в каталог пользователей под \ users или в \ programdata.

0

В краткосрочной перспективе может не потребоваться изменить ваше приложение, поскольку Vista поставляется с набором параметров совместимости, позволяющих запускать устаревшие приложения. Это включает в себя виртуализацию файлов и реестра, которая в основном перенаправляет операции записи в защищенные папки, такие как C: \ Program Files, в виртуальное место, видимое только для конкретного приложения, работающего в режиме совместимости.

В этой статье упоминается более подробная информация: How To Manage Windows Vista Application Compatibility у доктора Добба.

+0

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

+0

Это удивительно, потому что чтение файла всегда должно быть возможным. Вы уверены, что файл открывается в режиме только для чтения вашим приложением? –

+0

Способ открытия файла немного странный. Функциональность приложения распространяется на несколько библиотек DLL (чтобы уменьшить количество обновлений и инкапсулировать некоторые вещи). Поскольку номера файлов не пересекаются с DLL, одна DLL открывает и считывает файлы. Файл открывается как «двоичный», который читается/записывается. –

0

Karl Peterson написал nice article о том, где хранить данные пользователя & данных приложения, с VB6 class, который извлекает местоположение специальных путей для вас.