Моя проблема заключается в том, что программное обеспечение не показано в реестре в:
hkey_users < /strong> {sid} \ Software \ Microsoft \ Windows \ currentversion \ uninstall < /p>
Вместо этого показывается здесь:
. /> hkey_local_machine < /strong> \ software \ wow6432node \ microsoft \ windows \ currentversion \ uninstall {d8edcafd-7a78-41d7-9a23-157952d41436} < /p>
, когда пользователь был установлен на UNINTST BOLLICH (UNINTST BALLEAT-BALTIO Раньше), «добавить или удалить программы» неправильно удаляет программное обеспечение из списка. Программное обеспечение удаляется, но список в «Добавить или удалить программы» обновляется только после перезапуска. < /P>
Что у меня есть до сих пор: < /p>
[*] Проект настройки Visual Studio для MSI: < /li>
< /ol>
/> < /li>
postbuildevent =
Код: Выделить всё
"%PROGRAMFILES(x86)%\Windows Kits\10\bin\10.0.26100.0\x86\MsiInfo.exe" "$(BuiltOuputPath)" -w 10[*]additional data are saved to ProgramData: [CommonAppDataFolder][Manufacturer][ProductName]
[*] Реестр на целевой машине установлен на:
fullpath = hkcu \ software [производитель] < /p>
< /li>
manifest программного обеспечения установлено на: < /p>
Код: Выделить всё
< /code> < /p>
< /li>
< /ul>
Инструмент диалога настройки настройки (.exe) < /li>
< /ol>
App.maifest set: < /p>
[*] Инструмент создает задачу в планировщике задач Windows для запуска .msi в качестве регистрации в пользователе (это работает нормально, но устанавливает неправильные ключи реестра):
Код: Выделить всё
string command = $"msiexec.exe /i \"{msiPath}\" /qn /norestart /L*v \"C:\\ProgramData\\myprog\\install_log.txt\"";
string arguments = $"/Create /TN \"{taskName}\" /TR \"{command}\" /SC ONCE /ST {timeNowPlusOneMinute} /RL LIMITED /F /RU \"{loggedInUser}\"";
try {
using (Process process = new Process()) {
process.StartInfo.FileName = exePath;
process.StartInfo.Arguments = arguments;
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.Start();
output = process.StandardOutput.ReadToEnd();
error = process.StandardError.ReadToEnd();
process.WaitForExit();
exitCode = process.ExitCode;
return exitCode == 0;
}
} catch (Exception ex) {
error = $"error: {ex.Message}";
return false;
}
[*] Он проверяет, было ли программное обеспечение установлено с правильной версией -> это то, что я хотел бы проверить с помощью регистрации
>
Подробнее здесь: https://stackoverflow.com/questions/797 ... ed-in-user
Мобильная версия