Клиентское приложение VBScript, Неправильный Текущий Рабочий Каталог

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

На моем рабочем столе у меня есть папка под названием STKGui:

C:\Documents and Settings\Lauren\Desktop\STKGui

Расположенный в том каталоге следующие файлы: gui.html, style.css, save.html, load.html В STKGui там является также следующими каталогами: Изображения, Сценарии и SaveData. Сценарии содержат различные .vbs файлы, включая gui.vbs.

Я запускаю с gui.html. Я нажимаю кнопку, которая берет меня к load.html. load.html использует сценарии от Scripts\gui.vbs. Одна из функций загружает базу данных, и сделать так я обеспечиваю местоположение базы данных: C:\Documents and Settings\Lauren\Desktop\STKGui\SaveData\SaveData.accdb, Конечно, я хочу использовать путь файла прямого доступа вместо фиксированного пути. Моя начальная попытка загрузить базу данных перестала работать; это пыталось загрузиться от C:\Documents and Settings\Lauren\Desktop\SaveData\SaveData.accdb. Таким образом для поиска и устранения неисправностей я распечатал текущий рабочий каталог; очень к моему огорчению это был C:\Documents and Settings\Lauren\Desktop

Я не понимаю, почему мой рабочий стол является моим текущим рабочим каталогом. Разве это не должно быть, откуда файл работает? Я полагал, что это будет любой C:\Documents and Settings\Lauren\Desktop\STKGui (the location of load.html), ИЛИ C:\Documents and Settings\Lauren\Desktop\STKGui\Scripts (the location of gui.vbs, который содержит функцию, это пытается загрузить сообщения отладки базы данных/печати текущего рабочего каталога).

Кто-то может объяснить, почему текущий рабочий каталог - то, что это, или еще лучше скажите мне, как получить то, что я действительно хочу, который является местоположением выполнения файлов? (Я не забочусь, является ли это основная папка STKGui или папка сценариев - пока это в структуре каталогов приложения, я могу работать с ним!)


РЕДАКТИРОВАНИЕ (14.07.10 16:02 EDT):

Различные попытки печати текущего рабочего каталога или захвата файлов на основе того, что я - мысль был относительным путем из своего сценария выполнения, привели к пути моего рабочего стола вместо пути выполняемого сценария. Я споткнулся через эту ссылку: http://leereid.wordpress.com/2008/03/19/vbscript-current-directory-or-folder/, но ни одно из решений не работает на меня, поскольку я получаю ошибки времени выполнения относительно объекта Wscript. Таким образом, в то время как я не знаю, приведет ли какое-либо из решений на вышеупомянутой ссылке к различным результатам, если кто-то может помочь мне получить по крайней мере одного из них работающий, таким образом, я могу узнать, что это может быть шагом в правильном направлении.

Одно из решений, воспроизведенных ниже:

Set oShell = CreateObject("WScript.Shell")
Set ofso = CreateObject("Scripting.FileSystemObject")
oShell.CurrentDirectory = ofso.GetParentFolderName(Wscript.ScriptFullName)

производит следующую ошибку:

Объект потребовал: строка 'Wscript': 659 символов: 1

со строкой 659 являющийся:

oShell.CurrentDirectory = ofso.GetParentFolderName(Wscript.ScriptFullName)

1
задан Lauren 14 July 2010 в 20:12
поделиться

2 ответа

Это решение НЕ было идеальным, но в итоге я проанализировал URL-адрес в моем браузере, чтобы получить каталог .

guiPath = Mid(location.PathName, 2, len(location.PathName))

Set regExp = New RegExp
regExp.IgnoreCase = False
regExp.Global = True
regExp.Pattern = ".*/"

Set matchCollection = regExp.Execute(guiPath)

Set match = matchCollection(0)

guiPath = match.value

regExp.Pattern = "%20"

guiPath = regExp.Replace(guiPath, " ")

systemsDBPath = guiPath & "SaveData\SaveData.accdb"

Как я уже сказал, далеко не идеал. Может даже не работать, когда я работаю с приложением, в котором оно будет работать. Но я не мог найти лучшего способа.

0
ответ дан 2 September 2019 в 23:03
поделиться

Для серверной части:

Вы должны использовать Server.MapPath() для получения вашей "рабочей директории". Например, если вы хотите получить путь к файлу базы данных в C:\Documents and Settings\Lauren\Desktop\STKGui\SaveData\SaveData. accdb, корень вашего приложения C:\Documents and Settings\Lauren\Desktop\STKGui, вы будете использовать Server.MapPath("SaveData\SaveData.accdb").

Для клиентской стороны:

При ближайшем рассмотрении и копании в памяти, я понял, что MapPath доступен только из класса Server. Вместо этого вам нужно создать объект файловой системы следующим образом:

''get fs object
Set objFSO = CreateObject("Scripting.FileSystemObject")
''get actual file using path relative to calling vbs file
Set objFile = objFSO.GetFile("SaveData\SaveData.accdb")
''get path to the database
set sPathToDatabase = objFSO.GetAbsolutePathName(objFile)

Если это поможет, вот отличный ресурс по работе с файловой системой в vbScript: http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/filesfolders/files/

2
ответ дан 2 September 2019 в 23:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: