Почему команда VB6 MkDir выдает ошибку 75 на других машинах, но не на моей?

#vb6 #mkdir

#vb6 #mkdir

Вопрос:

Моя программа VB6 использует Mkdir для создания папки после первого подтверждения того, что папка не существует, используя этот код, который не может быть проще:

 If LenB(Dir$(ImportFolder amp; "" amp; UuidPartOfImportFolderName, vbDirectory)) = 0 Then
  MkDir ImportFolder amp; "" amp; sIECommon2.gstrUniqueImportUuid
End If
  

Когда я запускаю этот код в своей собственной среде разработки, изнутри IDE, или даже .exe на моем локальном компьютере, это работает отлично — папка создается, как ожидалось, и затем в ней успешно создаются другие файлы.

Но когда я создаю исполняемый файл и устанавливаю его на другой компьютер, команда Mkdir выдает ошибку «Ошибка 75: ошибка доступа к пути / файлу». (Я сузил область поиска до этой команды, поместив команду MsgBox непосредственно перед и после нее — предыдущая отображается, а следующая — нет.)

Согласно моим исследованиям, разрешения по умолчанию для папки, созданной с помощью Mkdir, являются rwx для всех … так почему же это выдает ошибку на других машинах, а не на моей?

Или, может быть, это не имеет никакого отношения к тому, на какой машине она запущена — у меня просто не было других теорий. Другая странная вещь заключается в том, что эта программа годами использовала MkDir в других местах; я только что добавил этот новый, когда добавил дополнительную функциональность.

Спасибо — с нетерпением жду ваших ответов.

Комментарии:

1. Трудно сказать, пока вы не скажете нам, что такое ImportFolder . Однако я не знаю, откуда у вас возникла идея создать папку, устанавливающую для нее защиту на что угодно, кроме того, что ее родительская папка имеет в качестве унаследованной защиты для дочерних объектов. Например, многие «общие» специальные папки имеют защиту владельца.

2. Папка импорта — это: C:Documents и настройки Имя пользователя Данные приложения Название компании ProductName Импорт

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

4. Вы проверяете, FolderX но создаете FolderY то, что уже могло быть предварительно настроено. Также убедитесь, что родительская папка существует (C: … ProductName Import)

5. Какие операционные системы вы используете на двух машинах? Я был бы готов поспорить, что на той, на которой она работает, установлена Windows XP, а на той, на которой она не работает, установлена Vista или 7.

Ответ №1:

Я подозреваю, что ответ WQW заключается в том, что происходит, но вы можете захотеть убедиться, что на двух машинах запущена одна и та же версия среды выполнения VB6 (MSVBVM6.dll). Существует несколько версий. Это рискованный вариант, но один может вести себя немного иначе, чем другой.

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

Комментарии:

1. Мы, наконец, решили проблему, заменив использование MkDir этим: Dim objDir в качестве нового сценария. FileSystemObject objDir.CreateFolder ImportFolder amp; «» amp; UuidPartOfImportFolderName Спасибо всем за ваши ответы.