|
Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
|
|||
---|---|---|---|
#18+
Например, есть параметр "Store Root" (REG_EXPAND_SZ) в ветке HKEY_CURRENT_USER\Software\Microsoft\Proga Варианты значений, как они там записаны: %USERPROFILE%\AppData\Local\Microsoft\Proga\ %USERPROFILE%\Desktop\Новая папка %SystemDrive%\Новая папка Читаю значение В1 (через .Net ф-ции) Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Код: vbnet 1. 2. 3. 4. 5.
В2 (через API) Код: 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.
Код: vbnet 1. 2. 3. 4. 5.
Записываю обратно(естественно без переменных в передаваемом значении): В1 (через .Net ф-ции) Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Код: vbnet 1. 2. 3. 4. 5. 6. 7.
В2 (через API) Код: 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.
Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Что имеем в сухом остатке: 1) При чтении через "Net" %variable%->истинный путь При чтении через "API" %variable%->%variable% 2) При записи через "Net" истинный путь->истинный путь При записи через "API" истинный путь->истинный путь Что бы в идеале хотелось: 1) При чтении %variable%->истинный путь 2) При записи истинный путь->%variable% Иными словами 1) прочел значение переменной, вывел путь в текстовое поле 2) выбрал путь в текстовом поле (понятно, без %variable%), записал путь в реестр (надо б с применением %variable%) (1) вроде как решается через "Net" (в данном случае устраивает, т.к. для HKEY_CURRENT_USER разделения 32/64 бит веток нет и связанных с этим проблем не предвидится) (2) не решается пока Где собака порылась? Как эту автоматику преобразования вызывать (особенно при "записи")? М.б. какие ф-ции есть? В .Net? В API? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2018, 21:43 |
|
Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
|
|||
---|---|---|---|
#18+
Вот разбираюсь... Дмитрий771) При чтении через "Net" %variable%->истинный путь Это потому что делаю Код: vbnet 1.
а если Код: vbnet 1.
то %variable% останется Дмитрий77При чтении через "API" %variable%->%variable% Чтоб в API варианте делало %variable%->истинный путь, надо судя по докам применить ExpandEnvironmentStrings function Дмитрий77хотелось 2) При записи истинный путь->%variable% Через .Net что-то не вижу решения Но через API вроде как есть: PathUnExpandEnvStrings function Надо пробовать. В .Net нет аналога ейного? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2018, 22:42 |
|
Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
|
|||
---|---|---|---|
#18+
Дмитрий77Чтоб в API варианте делало %variable%->истинный путь, надо судя по докам применить ExpandEnvironmentStrings function Ну OK, Метод Environment.ExpandEnvironmentVariables Дмитрий77Но через API вроде как есть: PathUnExpandEnvStrings function Надо пробовать. В .Net нет аналога ейного? Где? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2018, 22:54 |
|
Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
|
|||
---|---|---|---|
#18+
Дмитрий77хотелось 2) При записи истинный путь->%variable% Это примерно как, пусть мысли читает, а ещё носки стирает и кофе варит. Такие запросы обсмеют на любом форуме, даже самом толерантном и дружелюбном, а не то, что здесь на злом, жестоком и беспощадном :) В общем, проще говоря. Даже если ты хочешь подобного, и оно реализуемое через предположения, что оно тебе надо, это неправильно, и так нигде и никогда не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2018, 23:27 |
|
Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
|
|||
---|---|---|---|
#18+
Кидайте в меня тапками, но некоторые запросы выглядят из разряда гипер-творческого, как у того художника, который задумался, а не прибить ли мне свои яйца к мостовой. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2018, 23:29 |
|
Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
|
|||
---|---|---|---|
#18+
hVostt, Злой ты, и тапки на тебя тратить жалко. Дмитрий772) истинный путь->%variable% Задача решена: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Обратно, %variable%->истинный путь либо Environment.ExpandEnvironmentVariables но можно и через API: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2018, 00:05 |
|
Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
|
|||
---|---|---|---|
#18+
Дмитрий77hVostt, Злой ты, и тапки на тебя тратить жалко. Я не злой, есть Environment.GetEnvironmentVariables , получаешь переменные окружения и крутишь/вертишь как хочешь. Не обязательно для каждого чиха надо маршалить винапи. Да и вообще.. 2) выбрал путь в текстовом поле (понятно, без %variable%), записал путь в реестр (надо б с применением %variable%) Если надо, чтобы в конкретном случае сохранилось именно то значение, которое введено, без замены? Эти подстановки автоматом -- костыли. Ну и не работает твоя функция через импесонализацию в сервисе. А я просто разбавил твой диалог самим с собой ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2018, 00:34 |
|
Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
|
|||
---|---|---|---|
#18+
hVosttЭти подстановки автоматом -- костыли. Так делает WinMail, сохраняя путь к БД текущего пользователя в параметре "Store Root" (REG_EXPAND_SZ) в ветке HKEY_CURRENT_USER\Software\Microsoft\Windows Mail Он всегда подставляет . Дефолтный путь пишется как %USERPROFILE%\AppData\Local\Microsoft\Windows Mail\ Любой другой путь, кот. штатно меняется через Сервис->Параметры->Дополнительно->Обслуживание->Хранилище сообщений всегда пишется также с подстановкой . Проблема штатной процедуры, что она копирует базу в новое расположение (причем иногда, особенно при отсутствии навыков, делает это глючно и может БД вообще запороть). Но бывает, просто надо указать путь к БД. В утилитке, кот. я пишу (в плоскости вопроса кот. задал), пользователь должен просто указать путь к уже имеющейся (другой) БД. И записать этот параметр в указанное место реестра. Чтобы WinMail (при след. запуске) обратился к этому новому месту. Костыли ли это или не костыли, но я не вижу никаких оснований делать по-другому т.е. ПО СВОЕМУ, т.е. без указанных подстановок, хотя без подстановок работать конечно будет. hVosttНу и не работает твоя функция через импесонализацию в сервисе. Какая нафик импе[р]сонализация в сервисе. WinMail -классическое пользовательское приложение, запускаемое под текущим юзером. hVosttА я просто разбавил твой диалог самим с собой Ну и как это помогло решению задачи? Вот правда, тапок на тебя жалко, сгрызешь ведь[тапки, примечание ред]. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2018, 02:17 |
|
Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
|
|||
---|---|---|---|
#18+
Дмитрий77Так делает WinMail, сохраняя путь к БД текущего пользователя в параметре "Store Root" (REG_EXPAND_SZ) в ветке HKEY_CURRENT_USER\Software\Microsoft\Windows Mail Он всегда подставляет . Дефолтный путь пишется как %USERPROFILE%\AppData\Local\Microsoft\Windows Mail\ Любой другой путь, кот. штатно меняется через Сервис->Параметры->Дополнительно->Обслуживание->Хранилище сообщений всегда пишется также с подстановкой . Проблема штатной процедуры, что она копирует базу в новое расположение (причем иногда, особенно при отсутствии навыков, делает это глючно и может БД вообще запороть). Я говорю про обратный процесс. Подстановки нужно обязательно использовать при возможности, но не наоборот. Я бы очень не хотел, чтобы мой путь, записанный вот так: C:\Program Files\Blablaba «умная программа» от особо умного «разработчика» превратилась в %ProgramFiles%\Blablabla, потому что если мне надо %ProgramFiles%, я именно так и запишу. Или программа должна предложить подстановку, от которой я должен иметь возможность отказаться. Дмитрий77Ну и как это помогло решению задачи? Вот правда, тапок на тебя жалко, сгрызешь ведь[тапки, примечание ред]. Судя по твоим первым сообщениям, ты уже додумался, что есть такой класс в .NET, как Environment , в котором легко обнаруживается метод GetEnvironmentVariables , а дальше дальше справится даже ребёнок Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
У меня слов нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2018, 03:05 |
|
Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
|
|||
---|---|---|---|
#18+
hVosttЯ бы очень не хотел, чтобы мой путь, записанный вот так: C:\Program Files\Blablaba «умная программа» от особо умного «разработчика» превратилась в %ProgramFiles%\Blablabla, потому что если мне надо %ProgramFiles%, я именно так и запишу. Ну, в данном случае глупая программа "Windows Mail (formerly Outlook Express)", написанная 20-30 лет конечно же тупыми бородатыми индусскими гавнокодерами от Microsoft (куда им дуракам до им песо нализации) пишет таки %USERPROFILE%\AppData\Local\Microsoft\Windows Mail\ и если не делать подстановки, то это может легко превратиться в C:\Users\Иван Петрович Робинович\AppData\Local\Microsoft\Windows Mail\ что почему-то не видится мне в данном случае правильным. hVosttСудя по твоим первым сообщениям, ты уже додумался, что есть такой класс в .NET, как Environment , в котором легко обнаруживается метод GetEnvironmentVariables , а дальше дальше справится даже ребёнок Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
У меня слов нет. Ну, шо тебе на это сказать. Что касается обратного Код: c# 1. 2. 3.
-здесь у меня к .Net-у претензий нет, а вот что касается кода "от ребенка", типа того что ты привел, велика вероятность что что-то будет не учтено (какой-нибудь регистр, case, source.StartsWith -а если первая кавычка?-а таких НО в подобных кодах куча), даже неважно насколько у тебя рука набита на подобные коды, и в итоге получим расхождение с оригиналом (хорошо если не критическое). Посему мой код рискну предположить таки "ближе к телу". MS-исходников у меня конечно нету, но приложенный скрин как бы косвенно доказывает верность мысли: ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2018, 04:06 |
|
Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
|
|||
---|---|---|---|
#18+
Дмитрий77а вот что касается кода "от ребенка", типа того что ты привел, велика вероятность что что-то будет не учтено (какой-нибудь регистр, case, source.StartsWith -а если первая кавычка?-а таких НО в подобных кодах куча), даже неважно насколько у тебя рука набита на подобные коды, и в итоге получим расхождение с оригиналом (хорошо если не критическое). Суть в том, что вы имея на руках инструмент, класс Enviroment в котором есть метод получения коллекции всех переменных окружения, просто в упор не видите решения и лезете в винапи со словами, «нуу.. в .NET такого нет...». Получается, что если какой-то функции в .NET и в WinAPI нет, значит всё, приплыли? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2018, 17:06 |
|
Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
|
|||
---|---|---|---|
#18+
Дмитрий77Ну, в данном случае глупая программа "Windows Mail (formerly Outlook Express)", написанная 20-30 лет конечно же тупыми бородатыми индусскими гавнокодерами от Microsoft (куда им дуракам до им песо нализации) пишет таки %USERPROFILE%\AppData\Local\Microsoft\Windows Mail\ и если не делать подстановки, то это может легко превратиться в C:\Users\Иван Петрович Робинович\AppData\Local\Microsoft\Windows Mail\ что почему-то не видится мне в данном случае правильным. Вы меня не поняли. Ну лан. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2018, 17:08 |
|
|
start [/forum/search_topic.php?author=512+_&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
get settings: |
9ms |
get forum list: |
11ms |
get settings: |
10ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
76ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 1187ms |
total: | 1395ms |
0 / 0 |