Как обновить приложение VB6 с XP на Vista? - PullRequest
3 голосов
/ 18 февраля 2009

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

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

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

Ответы [ 4 ]

3 голосов
/ 18 февраля 2009

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

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

Это зависит от того, что вы хотите сделать. Если вы хотите их для каждого пользователя, сохраните их в Users / 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, если это вообще возможно, не делайте этого! В настоящее время мы сталкиваемся с проблемами , которые по-разному работают с API-интерфейсами для VB и стандартными API-файлами в файлах программных файлов.

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

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

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

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

0 голосов
/ 23 мая 2009

Карл Петерсон написал хорошую статью о том, где хранить пользовательские данные и данные приложений, с VB6 классом , который получает местоположение специальных путей для вас.

0 голосов
/ 18 февраля 2009

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

В этой статье упоминаются некоторые подробности: Как управлять совместимостью приложений для Windows Vista в Dr. Dobb's.

0 голосов
/ 18 февраля 2009

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

...