hta/javascript Как выполнить приложение с относительным путем

Я создаю .hta (с javascript), из которого хочу запустить несколько приложений.

Но когда я запускаю свой .hta, я получаю сообщение об ошибке, не могу найти файл

это код:

<script type="text/javascript" language="javascript">
    function RunFile(path) {
    var relpath = window.location.href;
    var fullpath = relpath + path;

    WshShell = new ActiveXObject("WScript.Shell");
    WshShell.Run(fullpath, 1, false);
    }

    RunFile("\file.exe");
</script>

person user1644062    schedule 12.12.2012    source источник


Ответы (1)


window.location.href включает также имя файла и протокол. Попробуй это:

var relpath = window.location.pathname.replace(/\\/g,'/').split('/');
relpath.pop();// JScript: relpath.length = relpath.length - 1;
relpath = relpath.join('/') + '/';

Обратите внимание на использование / вместо \, а также удобно заканчивать relpath на /, поэтому вам не нужно добавлять его в аргумент функции.

ИЗМЕНИТЬ

Я не уверен, что вы имеете в виду под получением местоположения без файла, может быть, это (цитата из Windows Sripting Technologies (к сожалению, сейчас не работает):

"The CurrentDirectory returns a string that contains the fully qualified path of
the current working directory of the active process."

Активный процесс — это, например, запущенный HTA, поэтому это даст локальный путь к файлу HTA (без имени файла).

currentDirectory является свойством WScript.Shell, поэтому вы можете использовать его с WshShell в своем коде, а также для установки рабочего каталога.

person Teemu    schedule 12.12.2012
comment
есть ли способ получить местоположение без самого файла? - person user1644062; 12.12.2012
comment
Эээ... Мой код делает именно это. Или вы хотите получить путь без объекта window.location? - person Teemu; 12.12.2012
comment
Большое спасибо, ваш код работает, но когда я ставлю пробелы в именах карт вместо _, я получаю ту же ошибку. - person user1644062; 12.12.2012
comment
Заключите всю строку пути в двойные кавычки, например: var path = '"' + fullpath + '"';. Чтобы ответить на ваш последний комментарий, в объекте location такого свойства нет. - person Teemu; 12.12.2012