Использовать cmd.exe не удалось добавить раздел реестра для текущего пользователя

#c# #cmd #registry #registrykey

#c# #cmd #реестр #registrykey

Вопрос:

Я создаю установочный файл с помощью Visual Studio Installer Project. Во время установки пользователь выберет целевой каталог и установит для всех пользователей или текущего пользователя. После того, как пользователь сделает выбор, я буду использовать эту информацию для добавления раздела реестра на локальном компьютере (для всех пользователей) или для текущего пользователя, зависит от выбора пользователя. Это сработало для локального компьютера, но не для текущего пользователя. Я написал пользовательский код действия, и метод будет вызван в методе фиксации.

Ниже приведен код для добавления раздела реестра:

     public void CreateReg(string cmd, bool allUsers)
{
    System.Diagnostics.Process process = new System.Diagnostics.Process();
    System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
    startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    startInfo.FileName = "cmd.exe";
    startInfo.Arguments = "/c "   cmd;

    if (allUsers)  // If create key for all users.
        startInfo.Verb = "runas";

    process.StartInfo = startInfo;
    process.Start();
}
  

Если это для текущего пользователя, allusers = false. Я зарегистрировал строку cmd, если я введу cmd в командной строке, будет создан раздел реестра текущего пользователя. Это также работает, если я создал отдельный проект, добавив только раздел реестра. Просто не работает в пользовательском действии. Я что-то пропустил? Спасибо!

Комментарии:

1. Что это за пользовательское действие? Отложенный или немедленный? В любом случае добавление значения реестра пользовательским действием — плохая идея.

2. @montonero Это немедленно. И это в методе фиксации. Можете ли вы объяснить, почему добавлять реестр в пользовательское действие — плохая идея? Спасибо.

3. Потому что таким образом вам нужно будет написать аналогичные действия для последовательностей удаления и отката. И вы не гарантированы от каких-либо ошибок в вашем скрипте или любых проблем в среде, из-за которых ваш скрипт не будет работать должным образом. В вашем случае это должно быть намного проще сделать с помощью MSI (хотя я не знаком с тем, что проект VS Installer может сделать в этом отношении). Вы проверили журнал установки? Что это говорит об этом пользовательском действии?

4. Обычно это плохая идея, потому что в MSI встроено множество функций для манипулирования реестром. Почему ваш раздел / значение реестра настолько особенное, что это невозможно сделать более обычными средствами?

5. @montonero @ Damien_The_Unbeliever Спасибо за ответ! Реестр, который я хочу добавить, предназначен для расширения Chrome, а не для приложения. Расширение Chrome просмотрит реестр, чтобы найти установленное приложение. Итак, удаление приложения и откат не являются проблемой.