Продукт может быть установлен(MSI) PerUser или PerMachine.
Мне нужно чтобы при установке PM анинсталлировались все предыдущие версии PU, PM и только затем ставилась новая версия. Хотелось бы на старте инсталлятора определить как установлен продукт: PU или PM?
И если PU — тогда еще и определить какой юзер установил его, т.е. тот ли, который сейчас текущий или другой?
Здравствуйте, Win32nipuh, Вы писали:
W>Как такое сделать в c#?
Это ваш продукт? Если да, то вы должны знать, какие он делает записи в реестре при различных вариантах установки? Или я вас неправильно понял?
Здравствуйте, vladpol, Вы писали:
V>Здравствуйте, Win32nipuh, Вы писали:
W>>Как такое сделать в c#? V>Это ваш продукт? Если да, то вы должны знать, какие он делает записи в реестре при различных вариантах установки? Или я вас неправильно понял?
Частично.
Да, это мой продукт.
Он не допускает мешанины, он должен быть один раз установлен в системе.
Есть инсталлятор, он предлагает юзеру выбрать как установить продукт PerUser или PerMachine.
Это было сделано давно.
В новом инсталляторе я хотел бы понять при установке:
1. Установлена ли предыдущая версия
2. Если да, то PerUser или PerMachine
3. Если PerMachine и в текущей инсталляции выбран PerMachine, тогда ок, иначе сообщить юзеру, чтобы определился.
4. Если PerUser, то проверить, какой юзер установил : тот, который сейчас пытается ставить новую версию или другой.
5. Если другой, то дать сообщение, чтобы анинсталлировали и выйти, иначе проверит
W>Частично. W>Да, это мой продукт. W>Он не допускает мешанины, он должен быть один раз установлен в системе. W>Есть инсталлятор, он предлагает юзеру выбрать как установить продукт PerUser или PerMachine. W>Это было сделано давно. W>В новом инсталляторе я хотел бы понять при установке: W>1. Установлена ли предыдущая версия W>2. Если да, то PerUser или PerMachine W>3. Если PerMachine и в текущей инсталляции выбран PerMachine, тогда ок, иначе сообщить юзеру, чтобы определился. W>4. Если PerUser, то проверить, какой юзер установил : тот, который сейчас пытается ставить новую версию или другой. W>5. Если другой, то дать сообщение, чтобы анинсталлировали и выйти, иначе проверит
Навскидку: насколько я понимаю, PerUser или PerMachine отличается в какую ветку реестра мы пишем информацию: HCU или HLM.
Поэтому сначала смотрим HLM — ищем PerMachine, если там нет — шерстим HKEY_USERS и ищем там
Здравствуйте, vladpol, Вы писали:
V>Навскидку: насколько я понимаю, PerUser или PerMachine отличается в какую ветку реестра мы пишем информацию: HCU или HLM. V>Поэтому сначала смотрим HLM — ищем PerMachine, если там нет — шерстим HKEY_USERS и ищем там
Да, попробую так, а определить имя юзера как?
Ну чтобы сравнить с текущим и написать скажем "Это установил Вася, а вы, Коля, не можете анинсталлировать"
Здравствуйте, Win32nipuh, Вы писали: W>Да, попробую так, а определить имя юзера как? W>Ну чтобы сравнить с текущим и написать скажем "Это установил Вася, а вы, Коля, не можете анинсталлировать"
Первый ключ (подветка) в HKEY_USERS это sid пользователя. В какой подветке найдешь следы своего софта, тот юзверь и установил. Имя пользователя по sid получается где-то так:
using System.Security.Principal;
// convert the user sid to a domain\namestring account = new SecurityIdentifier(stringSid).Translate(typeof(NTAccount)).ToString();
Всё, что нас не убивает, ещё горько об этом пожалеет.
W>Да, попробую так, а определить имя юзера как? W>Ну чтобы сравнить с текущим и написать скажем "Это установил Вася, а вы, Коля, не можете анинсталлировать"
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\<SSID>\ProfileImagePath путь к профайлу. Последняя папка должна быть именем пользователя
Но это то что я сходу нашел. Может как-то можно умнее
Спасибо, vladpol, Ромашка, все получается!
Обнаружить , что кто-то установил и дать юзеру сообщение.
Буду шлифовать дальше.
Надо эту проверку засунуть в инсталлятор.