Я знаю, почему это происходит, и я знаю, что мне нужно изменить мою программу для размещения Windows 7/8.
Хорошо, тогда я постараюсь не бить мертвой лошади (хотя это я, я регулярно люблю давать хорошую порку, потому что так много людей неправильно понимают это). Я только укажу, что тот факт, что ваша программа когда-либо работала правильно, даже в старых версиях Windows, была удачным следствием скрытой ошибки. Папка «Program Files» никогда не предназначалась для записи. Вы не просто работаете над какой-то глупой «проблемой» новых версий Windows. Это то, что должно было быть сделано с самого начала.
Я знаю, что папка appdata под «пользователями» является рекомендуемым местом для хранения баз данных/файлов слов/резервных копий. Тем не менее, в моей системе, которая скрыта, и я хотел бы, чтобы она была легко доступна пользователю (не скрыта), поэтому я думал о папке MyDocuments?
Я знаю, что это сложно, поэтому позвольте мне посмотреть, могу ли я попытаться сделать его максимально простым и hellip;
«App Data» папки для данных, предназначенных для внутреннего использования приложением и не намеревался увидеть или манипулировать непосредственно пользователем.
«Мои документы» папка предназначена для всего, что пользователь должен видеть и непосредственно манипулировать; другими словами, пользователь данные вместо приложение данные.
А также есть и пользовательские и глобальные варианты каждого из этих двух типов папок. В случае «данных приложения» вариант для каждого пользователя далее подразделяется на локальный (который находится только на локальной машине) и роуминг (который следует за учетной записью пользователя на любой машине в сети, к которой она входит в систему).
Так что если вы хотите, чтобы файлы были «легко доступны пользователю», вам обязательно нужно использовать папку «Мои документы». Вот что это за документы пользователя.
Причина, по которой все эти сложные правила существуют, состоит в том, что недобросовестные приложения таких популярных поставщиков, как Microsoft и Adobe, имели (имели?) Тенденцию сбрасывать мусор в папку «Мои документы» пользователя, что никогда не было пользователем предназначенный для непосредственного взаимодействия. Затем пользователи откроют папку с документами и видят кучу вещей, которые они никогда не кладут туда. «Что это за вещи? Это не мои. Где мои документы?» Моя мать попросила меня на прошлой неделе, когда я обновил ее компьютер.
Непонятно, как найти MyDocuments. Может ли кто-нибудь помочь?
От VB 6? Легкий способ - это тот, который был предложен Bob и Mark в вопросе, на который вы посмотрели. Это включает в себя создание объекта Shell и запрос на его местоположение.
Недостающая часть - это константа, которая соответствует папке «Мои документы». Вы найдете полный список констант here. Тот, который вам нужен, называется ssfPERSONAL
(потому что в старые времена, когда этот API был создан, Windows была не такой дружелюбной, и имя «Мои документы» еще не было изобретено), которое имеет значение &H05
. Таким образом, код выглядит следующим образом:
Const ssfPERSONAL = &H05
Dim strMyDocsPath As String
strMyDocsPath = CreateObject("Shell.Application").NameSpace(ssfPERSONAL).Self.Path
Если бы я хотел использовать что-то вроде MyDocuments \ НазваниеКомпании или даже папку AppData, указанной в приведенной выше ссылке, как я могу сказать, мастер пакета/развертывания для установки файлов MDB и папки, упомянутые выше, в эту конкретную папку? Есть ли макрос для папок Appdata или MyDocuments в PDW, которые я могу использовать?
Там не так много, что я могу добавить к этому, что Боб уже не покрывает в his answer, кроме рекомендовать, пока вы модернизацию этого VB приложение, вы также рассмотреть вопрос о вынужденном отжившем PDW в пользу системы лучший установщик.
Лично я огромного поклонник Inno Setup, который является бесплатным инсталлятором утилитой для приложений Windows, который предлагает больше возможностей, чем вы можете встряхнуть палку. Он отлично работает с приложениями VB 6. Я использовал его много раз для этого сам. Я думаю, что он довольно прост в использовании, по крайней мере, для основ. Он поддерживает всевозможные расширенные настройки, и некоторые из них могут быть сложными, если вы не учитесь хорошо, читая документацию, но все это очень удобно. Я даже наткнулся на то, чтобы написать код Delphi, чтобы настроить проекты Inno Setup!
В Inno Setup вы получаете доступ к путям к системным папкам, используя один из pre-defined constants. Например, {userdocs}
и {commondocs}
. Они работают так же, как (если не так, как было, давно) макросы в PDW.
Конечно, это все еще не устраняет проблему. Боб справедливо указывает: концепция папки «Мои документы» пользователя на самом деле не имеет особого смысла для установщика. Конечно, вы можете получить доступ к глобальному (общедоступным) папкам «Мои документы», потому что они доступны всем пользователям, но это, вероятно, не тот, который вам нужен. Установщик должен иметь возможность запускаться любым пользователем с достаточными привилегиями, и на самом деле это часто является учетной записью администратора, которая отличается от обычной учетной записи пользователя, используемой для запуска вашего приложения. Вы не можете принять определенную учетную запись пользователя во время установки, и ваш дизайн должен учитывать это.
Мне кажется, что «шаблонный» подход был бы хорошим для вас. Полный набор файлов, используемых для настройки новой учетной записи пользователя, можно сохранить в папке «Program Files». Это на самом деле хорошее место для него, потому что оно хорошо защищено от ошибочных изменений, и поскольку вы будете только , читаете, вы можете получить необходимые разрешения. Когда приложение запускается впервые под новой учетной записью пользователя, оно может обнаружить этот факт и предложить настроить новую учетную запись пользователя для использования с приложением. На этом этапе вы знаете, что работаете под правильной учетной записью пользователя, поэтому вы можете использовать приведенный выше код для запроса местоположения папки «Мои документы» этого пользователя. Если желаемая структура папок настроена в подкаталоге папки вашего приложения в «Program Files», настройка новой учетной записи пользователя может быть такой же простой, как копирование по этой папке. Если вам нужно собирать информацию у пользователя или предлагать параметры настройки, вы можете написать небольшой «First Run Wizard».
Сбрасывая приложения в забавные места, такие как каталог под корнем системного диска и позволяя всем пользователям быть администраторами или обладателями мощности, а также тонкой прокладки для приложений, позволили многим людям притвориться, что WinXP является машиной Win9x. Мир намного сложнее, и поскольку такие методы оставляют открывающиеся дыры в безопасности, PDW полезен только для простых приложений. – Bob77
, так вы говорите, что с помощью PDW нет простого способа установить файлы/папки mdb в папку «Мои документы» или папку AppData? Будет ли Инно сделать это проще? –
Лично я бы избежал Inno, как чумы. Он может быть мощным, но вы также можете легко создавать flaky настройки, которые «ломают» другие приложения на одном ПК. Ни один инсталлятор не может установить в папку пользователя, так как он не знает, что пользователь или пользователи будут входить в систему и ожидать использования вашего приложения. – Bob77