|
Передать массив байт через cmd без ошибок в общем случае как-то могу?
|
|||
---|---|---|---|
#18+
Юзер экспортирует сертификат из своего StoreLocation.CurrentUser Код: vbnet 1. 2.
Админ устанавливает этот сертификат в StoreLocation.LocalMachine (у юзера нет прав на это) Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Одним кодом под админом в общем случае делать нельзя, т.к. админ не обязательно совпадает с юзером и вытащить нужный сертификат (массив байтов cb) из хранилища юзера в общем случае не сможет. Посему юзер запускает другое exe под админом (с запросом Elevated при старте второго exe естественно), при этом должен передать ему этот самый экспортированный sb в качестве параметра, файла и т.п., чтоб второй exe его установил в локальное хранилище. Через Named Shared Memory понял что не получится, потому что не смогу создать MapFile с /Global под юзером. Самый простой вариант, сохранить cb в файл под юзером WriteAllBytes, а админ его прочтет ReadAllBytes (в заведомо известном месте, куда оба точно имеют доступ, %temp% не катит ибо могут не совпадать, но такое другое место допустим есть), потом файл удалить, но не люблю так делать. Идея такая. Юзер может запустить второй (админский) exe с командной строкой, передав в ней cb. Длина cb конечно не маленькая но в 8000+ (макс. длина cmd) вроде с запасом укладывается. Смущает только то что передать надо Byte() а cmd это String, соотв. перекодирование туда-сюда означает Encoding. Понятно что одинаковая на обоих концах, но не видится как good и хз что из этого выйдет. Задача взята отсюда: 20666360 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2017, 20:58 |
|
Передать массив байт через cmd без ошибок в общем случае как-то могу?
|
|||
---|---|---|---|
#18+
Извините, но я счастлив, что у меня нет таких заморочек! ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2017, 21:31 |
|
Передать массив байт через cmd без ошибок в общем случае как-то могу?
|
|||
---|---|---|---|
#18+
Дмитрий77, Передать путь к файлу не судьба? Чёто на ум приходит только присказка про жабу и гадюку ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2017, 21:42 |
|
Передать массив байт через cmd без ошибок в общем случае как-то могу?
|
|||
---|---|---|---|
#18+
hVosttПередать путь к файлу не судьба? Я про этот вариант упомянул: авторСамый простой вариант, сохранить cb в файл под юзером WriteAllBytes, а админ его прочтет ReadAllBytes (в заведомо известном месте, куда оба точно имеют доступ, %temp% не катит ибо могут не совпадать, но такое другое место допустим есть), потом файл удалить, но не люблю так делать. Файл как таковой изначально не существует (сертификат установлен в хранилище тек. юзера + содержит экспортируемые закрытые ключи, а не в виде PFX-файла). Перебросить "через файл" (экспорт в файл под юзером, импорт из файла под админом) - да, могу. Но не хочу( Чего из плодить). Хотел бы через файл, вопроса бы не задавал. Вопрос задан в шапке темы и сформулирован вполне корректно. Готов переформулировать: Есть массив байт, надо из него сделать String, потом из String обратно массив байт. (при этом, чтоб байты на выходе гарантированно не исказились). Что непонятно в вопросе? Просто начинаешь пояснять зачем, начинаются сказки про гадюку. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2017, 21:58 |
|
Передать массив байт через cmd без ошибок в общем случае как-то могу?
|
|||
---|---|---|---|
#18+
Дмитрий77Смущает только то что передать надо Byte() а cmd это String, соотв. перекодирование туда-сюда означает Encoding. Понятно что одинаковая на обоих концах, но не видится как good и хз что из этого выйдет. что может выйти из кодирования байтового массива в base64 кроме base64? ХЗ? - круто. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2017, 22:01 |
|
Передать массив байт через cmd без ошибок в общем случае как-то могу?
|
|||
---|---|---|---|
#18+
Дмитрий77Просто начинаешь пояснять зачем, начинаются сказки про гадюку. можно вместо гадюки скушать любимый кактус ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2017, 22:03 |
|
Передать массив байт через cmd без ошибок в общем случае как-то могу?
|
|||
---|---|---|---|
#18+
Изопропил, покажи как. Еще ж наверно строку их HEX-ов сделать туда-сюда можно, типа как в реестре байты хранятся. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2017, 22:08 |
|
Передать массив байт через cmd без ошибок в общем случае как-то могу?
|
|||
---|---|---|---|
#18+
Дмитрий77, https://msdn.microsoft.com/ru-ru/library/dhx0d524(v=vs.110).aspx https://msdn.microsoft.com/ru-ru/library/system.convert.frombase64string(v=vs.110).aspx ps base64 - это ж классика.... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2017, 22:35 |
|
Передать массив байт через cmd без ошибок в общем случае как-то могу?
|
|||
---|---|---|---|
#18+
Изопропилчто может выйти из кодирования байтового массива в base64 кроме base64? А впрочем, спасибо, все получилось: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59.
Проверил на всякий случай Strings.Len(str_byte) на тесте дало 4090 (по сути это PFX файл) Макс. длина cmd 8000+ Не рискую попасть на ограничение длины? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2017, 22:43 |
|
Передать массив байт через cmd без ошибок в общем случае как-то могу?
|
|||
---|---|---|---|
#18+
Дмитрий77, base64 добавляет 33% lpCommandLine [in, out, optional] The command line to be executed. The maximum length of this string is 32,768 characters, including the Unicode terminating null character. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2017, 22:47 |
|
Передать массив байт через cmd без ошибок в общем случае как-то могу?
|
|||
---|---|---|---|
#18+
ИзопропилThe maximum length of this string is 32,768 characters, including the Unicode terminating null character. Ну, я наверно не про ту cmd читал. Тогда успокоил, все в шоколаде, такой длины думаю там неоткуда взяться. Пошел оформлять это хозяйство в свою панель. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2017, 23:03 |
|
Передать массив байт через cmd без ошибок в общем случае как-то могу?
|
|||
---|---|---|---|
#18+
Дмитрий77, 32768 - это из CreateProcess ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2017, 23:11 |
|
Передать массив байт через cmd без ошибок в общем случае как-то могу?
|
|||
---|---|---|---|
#18+
ИзопропилДмитрий77, 32768 - это из CreateProcess Да понял я. Я видимо про cmd.exe читал. У меня AsAdmin вот таким кодом вызывается, в варианте VB6 там был ShellExecuteEx, но думаю то же самое, т.е. 32768. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2017, 23:26 |
|
Передать массив байт через cmd без ошибок в общем случае как-то могу?
|
|||
---|---|---|---|
#18+
Дмитрий77Я про этот вариант упомянул: авторСамый простой вариант, сохранить cb в файл под юзером WriteAllBytes, а админ его прочтет ReadAllBytes (в заведомо известном месте, куда оба точно имеют доступ, %temp% не катит ибо могут не совпадать, но такое другое место допустим есть), потом файл удалить, но не люблю так делать. Ты делаешь это в один момент времени, значит можешь удалить файл по окончанию процедуры. Я проблемы не вижу в упор. Дмитрий77Просто начинаешь пояснять зачем, начинаются сказки про гадюку. Потому что не надо придумывать себе проблем, чтобы потом героически их решать. Сохранил в файл, передал путь к файлу и всё. Нет, это не наш путь, надо через одно место всё порешать. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2017, 01:25 |
|
Передать массив байт через cmd без ошибок в общем случае как-то могу?
|
|||
---|---|---|---|
#18+
hVostt, ну вот че неймется? я вопрос корректно задал, Изопропил корректно подсказал. стоит раз в полгода зайти, сразу срач какой-то не по делу, то не так - это не так. Просто блин когда файлы плодишь, потом в десятках мест надо проверять, что они удалились, и где нибудь забываешь. >Сохранил в файл, передал путь к файлу и всё. Файлопомойка это. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2017, 02:33 |
|
Передать массив байт через cmd без ошибок в общем случае как-то могу?
|
|||
---|---|---|---|
#18+
Дмитрий77, Ну сам виноват, я увидел целую историю о том, как ты страдаешь фигнёй, вместо того, чтобы решать задачу по уму. Так что не обессудь. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2017, 04:17 |
|
Передать массив байт через cmd без ошибок в общем случае как-то могу?
|
|||
---|---|---|---|
#18+
Дмитрий77Файлопомойка это. Файловая система это по своей сути файлопомойка. Зато у тебя никогда не пригорит по поводу, что какой-нибудь сертификат в base64 не влез в cmd с другими параметрами. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2017, 04:21 |
|
Передать массив байт через cmd без ошибок в общем случае как-то могу?
|
|||
---|---|---|---|
#18+
hVosttрешать задачу по уму. По уму я решил. 20666326 20666360 То о чем идет речь здесь это тоже по уму. И решилось достаточно быстро и просто. >Зато у тебя никогда не пригорит по поводу, что какой-нибудь сертификат в base64 не влез в cmd с другими параметрами не пригорит, я такие операции делаю независимо с одним-двумя параметрами и они отработаны сто лет в обед. ключевая ф-ция Function ExecuteProcess смысл ее донельзя прост когда требуется действо "AsAdmin", прога запускает другой экземпляр себя + cmd и этот экземпляр требует админа(через окно UAC). main() анализирует cmd и при наличии /ключ= делает одну конкретную операцию и выходит. Основной экземпляр (запущенный в основном режиме под обычным пользователем) при этом ждет возврата результата (в случае если используется useDoEvent, может еще что-то делать при этом). >как ты страдаешь фигнёй это не фигня, это интересный рабочий вопрос, причем довольно быстро решаемый фигня, это например написать 10 нехилых MsgBox-ов на английском, потом запихнуть этот текст в строковые переменные, перевести на русский и т.д. фигня это писать справочную систему фигня это писать обработку ошибок + красивый лог, хотя понимаешь что в 99,9% случаев ошибки там не будет и быть не может на фигню уходит большая часть времени без фигни к сожалению никак но не простой вопрос на который давно получен быстрый ответ ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2017, 05:08 |
|
Передать массив байт через cmd без ошибок в общем случае как-то могу?
|
|||
---|---|---|---|
#18+
Дмитрий77фигня это писать справочную систему Всё верно. Пусть люди прокачивают свои способности к телепатии. Пусть разбираются методом тыка и матерятся всю дорогу. Дмитрий77фигня это писать обработку ошибок + красивый лог, хотя понимаешь что в 99,9% случаев ошибки там не будет и быть не может Всё верно. То, что в программах бывают ошибки, это специально выдуманный миф, чтобы заморочить людей. А если ошибки и бывают, надо их просто исправлять, а не тратить время на поиски причин в логах. Хотя.. на этот момент способности к телепатии уже должны быть развиты, так это решает всё проблемы. Дмитрий77на фигню уходит большая часть времени Ну глядя на то, какой ты фигнёй страдаешь, вместо того, чтобы делом заниматься, это 100% верное утверждение Дмитрий77но не простой вопрос на который давно получен быстрый ответ Простой вопрос был бы такой: как мне мой byte[] перевести в строку и потом обратно? Хотя, если бы ты смог его сформулировать таким образом, ты бы ответ нагуглил секунд за 10. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2017, 09:39 |
|
Передать массив байт через cmd без ошибок в общем случае как-то могу?
|
|||
---|---|---|---|
#18+
Дмитрий77, Кстати, лучше уж передать твой сертификат не через параметры, а через входной поток. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Пример: Код: powershell 1. 2.
Так ты можешь передавать данные гораздо больших размеров, чем позволено в командной строке, и просто сразу закрыть вопрос на любые непредвиденные ситуации. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2017, 09:47 |
|
Передать массив байт через cmd без ошибок в общем случае как-то могу?
|
|||
---|---|---|---|
#18+
Дмитрий77, Ещё варианты: System.Console.In.ReadToEnd() Console.OpenStandardInput() Пример запуска: Код: powershell 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2017, 09:50 |
|
Передать массив байт через cmd без ошибок в общем случае как-то могу?
|
|||
---|---|---|---|
#18+
hVosttДмитрий77фигня это писать справочную систему Всё верно. Пусть люди прокачивают свои способности к телепатии. Пусть разбираются методом тыка и матерятся всю дорогу. Да пишу я эти хэлпы в лучшем виде, не переживай. Только 90% юзеров их не читают. Но все равно пишу, чтоб прога солидней выглядела. Да и Вы, уважаемый, не читаете о чем люди пишут: hVosttПростой вопрос был бы такой: как мне мой byte[] перевести в строку и потом обратно? Хотя, если бы ты смог его сформулировать таким образом, ты бы ответ нагуглил секунд за 10. Специально для Вас переформулировал, в 4-м посте сверху: Готов переформулировать: Есть массив байт, надо из него сделать String, потом из String обратно массив байт. (при этом, чтоб байты на выходе гарантированно не исказились). Не тоже самое, не? Но вы ж не читаете, чукча не читатель, чукча писатель. Да насрать юзеру, через файл это сделано, через классический cmd или через мутный грязе-.Net о-поток. И мне насрать, если честно. Работает, отлично. Просто ответ получен через 2 часа как вопрос задан, а срач с гадюками продолжается еще +13 часов с момента как получен ответ, и видимо продолжится еще до послезавтра. Я за это время уже все имплементировал, прострадал фигней с "10-ю Msgbox-ами " на русском, английском, китайском и суахили (шутю) и с вами успел "подискутировать". Вот поэтому порой лучше погуглить 2 часа, а не 2 минуты, после того как дали оч. явную подсказку (за которой и пришел, а зачем еще на форум ходят?) Гадюк оно конечно можно игнорировать, но иногда тоже хочется погадючиться, время только уходит, а вот это обидно. А то вот приходит кто-нибудь сюда из гуглопоиска, вроде и вопрос поставлен, и ответ найден, а поди найди среди 100 постов, когда кругом одни гадюки среди кактусов ползают. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2017, 11:27 |
|
Передать массив байт через cmd без ошибок в общем случае как-то могу?
|
|||
---|---|---|---|
#18+
Командная строка легко перехватывается - начиная опцией в диспетчере задач "показать командную строку". И заканчивая утилитами, которые это делают специально, я такую для себя написал и логирую всю активность процессов. Для контроля и анализа. Поток немного сложнее перехватить, особенно если продумать защиту от перехвата потока (как это сделано в телнете например). Если важна безопасность, конечно. Ну и я бы не называл поток "мутным", на мой взляд это лучшее решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2017, 17:32 |
|
Передать массив байт через cmd без ошибок в общем случае как-то могу?
|
|||
---|---|---|---|
#18+
ART-CODEПоток немного сложнее перехватить, особенно если продумать защиту от перехвата потока (как это сделано в телнете например). чё в теленете сделано? пургу зачем гнать ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2017, 17:42 |
|
|
start [/forum/topic.php?fid=20&fpage=41&tid=1399787]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 302ms |
total: | 451ms |
0 / 0 |