Клиентское приложение VBScript, неверный текущий рабочий каталог - PullRequest
1 голос
/ 14 июля 2010

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

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

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

В этом каталоге находятся следующие файлы: gui.html, style.css, save.html, load.html В STKGui также есть следующие каталоги: Images, Scripts и 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 (расположение load.html) ИЛИ C: \ Documents and Settings \ Lauren \ Desktop \ STKGui \ Scripts (расположение gui.vbs, которое содержитфункция, которая пытается загрузить базу данных / печатать отладочные сообщения текущего рабочего каталога).

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


РЕДАКТИРОВАТЬ (14.07.10)16:02 ПО ВОСТОЧНОМУ ВРЕМЕНИ):

Различные попытки печати текущего рабочего каталога или получения файлов, основанные на том, что, как я думал, был относительным путем из моего исполняемого скрипта, привели к тому, что путь к моему рабочему столу вместо путивыполненный скрипт.Я наткнулся на эту ссылку: 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)

Ответы [ 2 ]

2 голосов
/ 14 июля 2010

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

Вы должны использовать 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/

0 голосов
/ 21 июля 2010

Это решение НЕ было идеальным, но в итоге я проанализировал 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"

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

...