исправить ошибку функции doScript в сценарии InDesign

avatar
ha a
1 июля 2021 в 16:53
255
2
0

Я написал сценарий для InDesign и использовал doScript для запуска bat-файла. Этот скрипт работает на одних системах и не работает на других. Ошибка на изображении.

enter image description here

Я запускаю InDesign от имени администратора. Но выдает другую ошибку.

enter image description here

Как исправить ошибку?

function batFile(str) {
    var path = "~\\AppData\\Roaming\\test\\";
    var filename = 'b1.bat';

    var file1 = new File(path + filename);
        file1.encoding = 'UTF-8';
        file1.open('w');
        var txt = "systeminfo | findstr /B /C:\"OS Name\" /C:\"OS Version\">%appdata%\\test\\t1.txt"
        file1.write(txt);
        file1.close();

    var cmdcode = "CreateObject(\"WScript.Shell\").Run \"%appdata%\\test\\b1.bat\", 0, True";
    app.doScript(cmdcode, ScriptLanguage.visualBasic, undefined, UndoModes.FAST_ENTIRE_SCRIPT);
    var result = path + "t1.txt";
    var arry = openFile2(result);
    
    if (arry.length != 0) {
        return arry;
    } else {
        return "null";
    }
}

**

Обновление

Я нашел проблему. Эта проблема возникает, когда имя пользователя состоит из двух частей, например «ваше имя». Чтобы решить эту проблему, нам нужно поместить адрес в две двойные кавычки.

var txt = "systeminfo | findstr /B /C:\"OS Name\" /C:\"OS Version\">\"%appdata%\\test\\t1.txt"\"
    

** Обновление 2

В Windows, когда пользователь использует OneDrive, также изменяется путь AppData, из-за чего doScript не запускается. например:

c:\users\username\appdata

Изменения на:

c:\users\username\onedrive\appdata

Источник
user692942
4 июля 2021 в 11:17
0

Это проблема запуска кода в коде и создания предположений о том, в чем заключаются проблемы. Что вы не поясняете, так это то, что вы запускаете JavaScript через InDesign, который динамически создает bat-файл, а затем использует команды VBScript через метод doScript() для выполнения bat-файла.

Ответы (2)

avatar
Yuri Khristich
1 июля 2021 в 20:47
0

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

var bat_file = File("your_file.bat");
bat_file.execute();

Обновление

На основании вашего кода я могу предложить обходной путь: добавьте & echo ok > %appdata%\\test\\ok.txt в ваш bat-файл и проверьте, существует ли файл ok.txt, прежде чем двигаться дальше.

function batFile(str) {
    var path = "~\\AppData\\Roaming\\test\\";
    var filename = 'b1.bat';

    var file1 = new File(path + filename);
        file1.encoding = 'UTF-8';
        file1.open('w');
        var txt = "systeminfo | findstr /B /C:\"OS Name\" /C:\"OS Version\">%appdata%\\test\\t1.txt";
        // add the file 'ok.txt' after the previous command is finished
        txt += " & echo ok > %appdata%\\test\\ok.txt";
        file1.write(txt);
        file1.close();

    // run the bat file
    file1.execute();

    // check if the file 'ok.txt' exists before going further
    var ok = File(path + "ok.txt");
    while (!ok.exists) $.sleep(100);
    ok.remove();

    // do stuff
    var result = path + "t1.txt";
    var arry = openFile2(result);

    if (arry.length != 0) {
        return arry;
    } else {
        return "null";
    }
}

ha a
3 июля 2021 в 17:12
0

После запуска doScript будет создан файл, который я вызову позже. Я проверил ваш метод. Упомянутый вами метод создает проблему, заключающуюся в том, что, похоже, существует процесс выполнения кода. Это означает, что остальной код скрипта выполняется одновременно с Execute.

Yuri Khristich
3 июля 2021 в 22:33
1

Удачи. Но я сомневаюсь, что кто-то сможет вам помочь без вашего кода и без информации о том, что именно делает ваш код. Наверное тупого pause / sleep() или file.exists будет достаточно, но сказать невозможно

Yuri Khristich
4 июля 2021 в 08:54
1

Похоже на глюк VBS. Я только что обновил свой ответ. Кстати, обратите внимание, вы даже не упомянули, что используете VBS, но, скорее всего, это был корень проблемы. Вот почему код необходим почти всегда.

ha a
6 июля 2021 в 21:37
0

Спасибо, Юрий Христич. Я протестировал file.execute(), и он работал нормально. но у меня проблема с execute(). окно шаблона команды откроется, когда я использую эту функцию. Есть ли способ не показывать это?

Yuri Khristich
6 июля 2021 в 22:30
0

Я не уверен, что вы имеете в виду под «окном командного шаблона»? Если вы имеете в виду окно cmd.exe, то, увы, насколько я знаю, скрыть его в данном случае невозможно.

ha a
7 июля 2021 в 07:20
0

Извините, это была опечатка. Я имел в виду тот же CMD (Командная строка).

ha a
15 августа 2021 в 19:25
0

Скрипт снова не работает. Мой собственный сценарий и ваш сценарий. Windows, похоже, не позволяет сценарию создавать файл в том месте, где doScript выполняет его. у вас есть какие-либо идеи. Я нахожу эту ссылку: community.adobe.com/t5/after-effects/…. но не работаю в индизайне

Yuri Khristich
16 августа 2021 в 04:24
0

Привет, doScript()? Я не использую его в своем фрагменте. Я использую file.execute(). Что касается папки, я обычно сохраняю и запускаю такие временные файлы в папке Temp пользователя. Скрипт расширения имеет для этого собственную переменную: Folder.temp. Я не могу проверить прямо сейчас, но это всегда работало без проблем. Попробуйте временную папку. Хотя не исключено, что еще одно кровавое обновление безопасности для Windows все сломало. Если да, то это было бы печально, и пока я понятия не имею, как это можно было бы исправить.

ha a
16 августа 2021 в 08:11
0

:( Я хочу сохранить файл навсегда. Если пользователь очистит временную папку, мой файл будет удален, и скрипт не будет работать.

avatar
Marc Autret
3 июля 2021 в 23:07
1

Об этой известной ошибке сообщается в UserVoice: https://indesign.uservoice.com/forums/601180-adobe-indesign-bugs/suggestions/41072476-type-library-is-not-automatically- created-by-cc202. Обычный прием для решения этой проблемы: запустить InDesign хотя бы один раз от имени администратора на клиентском компьютере. Это активирует поддержку VBS.

ha a
4 июля 2021 в 04:33
0

Я видел эту ссылку раньше. Я тестировал версии 2015, 2020 и 2021 годов. Некоторые системы работают без проблем, а другие выдают ошибки.

user692942
4 июля 2021 в 11:28
1

Я бы проверил различные уровни UAC (Контроль учетных записей) в каждой системе, а также включен ли режим одобрения администратором в локальной политике безопасности, поскольку это может повлиять на то, как будет вести себя работа от имени администратора, и может объяснить несоответствие.