Как определить, кто установил продукт?
От: Win32nipuh  
Дата: 25.11.14 12:34
Оценка:
Продукт может быть установлен(MSI) PerUser или PerMachine.

Мне нужно чтобы при установке PM анинсталлировались все предыдущие версии PU, PM и только затем ставилась новая версия.
Хотелось бы на старте инсталлятора определить как установлен продукт: PU или PM?
И если PU — тогда еще и определить какой юзер установил его, т.е. тот ли, который сейчас текущий или другой?


Как такое сделать в c#?
Re: Как определить, кто установил продукт?
От: vladpol Украина http://vlad-mislitel.livejournal.com/
Дата: 25.11.14 13:36
Оценка:
Здравствуйте, Win32nipuh, Вы писали:

W>Как такое сделать в c#?

Это ваш продукт? Если да, то вы должны знать, какие он делает записи в реестре при различных вариантах установки? Или я вас неправильно понял?
С уважением, Владислав Полищук
Re[2]: Как определить, кто установил продукт?
От: Win32nipuh  
Дата: 25.11.14 14:54
Оценка:
Здравствуйте, vladpol, Вы писали:

V>Здравствуйте, Win32nipuh, Вы писали:


W>>Как такое сделать в c#?

V>Это ваш продукт? Если да, то вы должны знать, какие он делает записи в реестре при различных вариантах установки? Или я вас неправильно понял?


Частично.
Да, это мой продукт.
Он не допускает мешанины, он должен быть один раз установлен в системе.
Есть инсталлятор, он предлагает юзеру выбрать как установить продукт PerUser или PerMachine.
Это было сделано давно.
В новом инсталляторе я хотел бы понять при установке:
1. Установлена ли предыдущая версия
2. Если да, то PerUser или PerMachine
3. Если PerMachine и в текущей инсталляции выбран PerMachine, тогда ок, иначе сообщить юзеру, чтобы определился.
4. Если PerUser, то проверить, какой юзер установил : тот, который сейчас пытается ставить новую версию или другой.
5. Если другой, то дать сообщение, чтобы анинсталлировали и выйти, иначе проверит
Re[3]: Как определить, кто установил продукт?
От: vladpol Украина http://vlad-mislitel.livejournal.com/
Дата: 25.11.14 16:45
Оценка:
Здравствуйте, Win32nipuh, Вы писали:


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 и ищем там
С уважением, Владислав Полищук
Re[4]: Как определить, кто установил продукт?
От: Win32nipuh  
Дата: 26.11.14 08:58
Оценка:
Здравствуйте, vladpol, Вы писали:

V>Навскидку: насколько я понимаю, PerUser или PerMachine отличается в какую ветку реестра мы пишем информацию: HCU или HLM.

V>Поэтому сначала смотрим HLM — ищем PerMachine, если там нет — шерстим HKEY_USERS и ищем там

Да, попробую так, а определить имя юзера как?
Ну чтобы сравнить с текущим и написать скажем "Это установил Вася, а вы, Коля, не можете анинсталлировать"

--------------
слава, славой, а политике место в политике.
Отредактировано 28.11.2014 10:03 kaa.python . Предыдущая версия .
Re[5]: Как определить, кто установил продукт?
От: Ромашка Украина  
Дата: 26.11.14 09:31
Оценка: 3 (1)
Здравствуйте, Win32nipuh, Вы писали:
W>Да, попробую так, а определить имя юзера как?
W>Ну чтобы сравнить с текущим и написать скажем "Это установил Вася, а вы, Коля, не можете анинсталлировать"

Первый ключ (подветка) в HKEY_USERS это sid пользователя. В какой подветке найдешь следы своего софта, тот юзверь и установил. Имя пользователя по sid получается где-то так:
using System.Security.Principal;

// convert the user sid to a domain\name
string account = new SecurityIdentifier(stringSid).Translate(typeof(NTAccount)).ToString();


Всё, что нас не убивает, ещё горько об этом пожалеет.
Re[5]: Как определить, кто установил продукт?
От: vladpol Украина http://vlad-mislitel.livejournal.com/
Дата: 26.11.14 10:24
Оценка:
Здравствуйте, Win32nipuh, Вы писали:


W>Да, попробую так, а определить имя юзера как?

W>Ну чтобы сравнить с текущим и написать скажем "Это установил Вася, а вы, Коля, не можете анинсталлировать"


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\<SSID>\ProfileImagePath путь к профайлу. Последняя папка должна быть именем пользователя

Но это то что я сходу нашел. Может как-то можно умнее
С уважением, Владислав Полищук
Отредактировано 28.11.2014 10:04 kaa.python . Предыдущая версия .
Re[6]: Как определить, кто установил продукт?
От: Win32nipuh  
Дата: 26.11.14 11:32
Оценка:
Спасибо, vladpol, Ромашка, все получается!
Обнаружить , что кто-то установил и дать юзеру сообщение.
Буду шлифовать дальше.
Надо эту проверку засунуть в инсталлятор.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.