Расписание задачи с пробелами в пути

Мы планируем задачу программно. Однако исполняемый файл, который должен быть запланирован, может быть установлен по пути с пробелами. т.е. c: \ program Files \ папка \ папка \ папка program \ program.exe

Когда мы указываем этот путь в качестве параметра для Планировщика Tasjk, он не запускается, потому что не может найти исполняемый файл. Это очевидно должно быть заключено в кавычки (").

Проблема, с которой мы сталкиваемся, заключается в том, что даже когда мы заключаем путь в кавычки, когда передаем его в качестве параметра (cmd + "\" + path + "\"), он все равно не включает кавычки в путь, который используется для планирования задача.

Кто-нибудь есть идеи, как заставить кавычки быть включены в путь?

РЕДАКТИРОВАТЬ: Ответ на комментарий:

У нас была та же идея, и здесь проблема. Формат ~ 1 основан на индексе папки, так что, если, скажем, у вас были эти 3 папки:

Program Applications
Program Files
Program Zips

тогда путь будет: progra ~ 2

Теперь, если вы скажете, что таких папок более 10, путь может выглядеть следующим образом: progr ~ 12.

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

Мы надеемся, что есть лучший способ.

РЕДАКТИРОВАТЬ 2: Добавлен соответствующий фрагмент кода

Вы запросили код: вот как мы строим строку Args, которую мы передаем планировщику:

string args = "/CREATE /RU SYSTEM /SC " + taskSchedule + " /MO " + taskModifier + " /SD " + taskStartDate + " /ST " + taskStartTime + " /TN " + taskName + " /TR \"" + taskSource + "\"";

где taskSource - путь к приложению.

11.12.2008 18:35:05
О каком планировщике заданий вы говорите? Как вы вызываете это? Код пожалуйста.
VVS 11.12.2008 19:11:00
О каком планировщике заданий вы говорите? ИМХО, похоже, что он неправильно обрабатывает вашу действительную командную строку.
TheSoftwareJedi 11.12.2008 19:53:17
«тогда путь будет: progra ~ 2» - это не обязательно будет progra ~ 2. Зависит от того, который создан первым. После создания он не изменится, даже если он будет отсортирован по-другому.
faulty 12.12.2008 12:12:37
правильно, я просто пытался объяснить, почему это может быть проблемой, а не жизнеспособным решением.
Victor 12.12.2008 13:40:51
5 ОТВЕТОВ
РЕШЕНИЕ

Похоже, что вы используете schtasks.exe - мне потребовалось больше времени, чтобы понять это, чем найти ответ! Более подробную информацию, пожалуйста! :) Я нашел ответ с помощью быстрого поиска Google

Попробуйте этот код:

string args = "/CREATE /RU SYSTEM /SC " + taskSchedule + " /MO " + taskModifier + " /SD " + taskStartDate + " /ST " + taskStartTime + " /TN " + taskName + " /TR \"\\\"" + taskSource + "\""

Это добавляет \ "в начале значения параметра TR.

2
11.12.2008 20:24:04
Google твой друг. Гугл первый, ТАК второй. :)
TheSoftwareJedi 11.12.2008 20:24:23
Вероятно, это было бы более очевидно в виде строки. Формат (@ ""). Мне нравится string.Format ().
recursive 11.12.2008 20:26:01
Гугл первый, ТАК второй, TheSoftwareJedi третий
ScottCher 11.12.2008 20:27:51
Ну, я мог бы поклясться, что мы попробовали это таким образом, но мы этого не сделали, мы дважды избежали кавычек, мы также не добавили escape-символ. FWIW, ссылка не так полезна, как ваш ответ, поэтому я думаю, что SO будет первым, Google 2nd. Вот почему SO был создан, поэтому мы получаем значимые целевые ответы. Спасибо еще раз!
Victor 11.12.2008 20:34:02

Вы можете заменить программные файлы на progra ~ 1
и папку program в папку ~ 1 ( первые 6 букв и ~ 1), чтобы заставить его работать, пока кто-то не отправит правильный ответ

0
11.12.2008 18:58:52
Смотрите редактирование вопроса. здесь недостаточно места для объяснения.
Victor 11.12.2008 19:07:35

ты можешь показать код?

т.е. сделать путь в вышеприведенном примере "path" (с кавычками), а затем сделать вызов

Это также может помочь http://www.jguru.com/faq/viewquestion.jsp?EID=768691.

0
11.12.2008 18:59:09
спасибо за ссылку. Это на самом деле поднимает пару вопросов с использованием формата короткого имени. по ссылке короткие имена папок генерируются при создании, и если папка удаляется, другие имена папок не меняются. что означает, что мой расчет может быть неверным.
Victor 11.12.2008 19:12:30
более того, в зависимости от установки ОС короткие имена могут не генерироваться, что может привести к сбою, так как исполняемый файл не будет найден. это хуже, чем я думал.
Victor 11.12.2008 19:13:54

Угадай короткое имя не очень хороший способ, так как это деталь реализации и может меняться с каждой версией Windows.

Если вам нужно короткое имя, просто спросите его: http://www.c-sharpcorner.com/UploadFile/crajesh1981/RajeshPage103142006044841AM/RajeshPage1.aspx

0
11.12.2008 19:17:38
спасибо за ссылку. Однако мы могли бы столкнуться с ситуацией, когда: «Когда приложение вызывает эту функцию и указывает путь на томе, который не поддерживает псевдонимы 8.3, функция завершается ошибкой с ERROR_INVALID_PARAMETER, если путь длиннее 67 байт».
Victor 11.12.2008 19:25:31

Поместите пакетный файл в место, где нет пробелов.

В командном файле запустите команды программы с пробелами.

-1
11.12.2008 20:08:33
Черт, да, переименование вашего исполняемого файла - это простое решение простой проблемы. Это добавляет уровень сложности и путаницы через несколько лет, когда что-то меняется, но что ты собираешься делать?
Karl 11.12.2008 20:10:21
Я не защищаю переименование любых исполняемых файлов. Просто создайте новый однострочный пакетный файл. Вы даже можете добавить комментарии, чтобы объяснить ситуацию.
recursive 11.12.2008 20:23:01