Как передать путь каталога в качестве командной строки для процесса? - PullRequest
0 голосов
/ 24 июля 2009

Я использую regasm.exe для создания файла tlb и программной регистрации сборки. Но путь к tlb в самом корневом каталоге .NET. так же, как это

буфер содержит c: \ windows \ Microsoft.Net \ framework \ v2.0.57 \ RegAsm.exe

if(!CreateProcessW(buffer,L" C:\\Program Files\\Test\\Test.dll  /codebase /tlb /silent" ,NULL, NULL,FALSE, 0,NULL,NULL,(LPSTARTUPINFOW)&si,&pi ) )

Но я думаю, что он не займет полный путь, так как естьпустая ч / б программа и файлы. Как и ожидалось, когда я запускаю команду, она также показывает, что не может найти входную сборку c: \ program.

обычно в командной строке мы можем указать как

RegAsm.exe "c: \ program files \ Test \ test.dll" / codebase / tlb это жирный шрифт, который я должен передать в командной строке, но он содержит двойные кавычки в двойных кавычках. поэтому я был поражен.

Как я могу это исправить

Ответы [ 2 ]

1 голос
/ 24 июля 2009

Вам необходимо заключить путь в кавычки в строке, что можно сделать, экранируя символ кавычки, поставив перед ним обратную косую черту. Итак, ваш второй параметр CreateProcessW будет:

L"\"C:\Program Files\Test\Test.dll\" /codebase /tlb /silent"

Это даст вам командную строку с кавычками, которые вы будете использовать в командной строке.

0 голосов
/ 24 июля 2009

Просто посмотрите документацию для функции CreateProcess: http://msdn.microsoft.com/en-us/library/ms682425%28VS.85%29.aspx

Там написано:

lpCommandLine [in, out, необязательно] Версия этой функции в Unicode, CreateProcessW,можете изменить содержимое этой строки. Следовательно, этот параметр не может быть указателем на постоянную память (например, константную переменную или литеральную строку). Если этот параметр является константной строкой, функция может вызвать нарушение прав доступа.

В ней есть пример, где указывается исполняемый файл в каталоге «Program Files». ,Я не так хорош в C ++. Еще бы привел пример.

...