2011-12-19 3 views
-2

Я хочу получить программное обеспечение, установленное с удаленного хоста. Я хочу получить детали из реестра, а не из Win32_Product.Я использую wmi. Я попробовал так много примеров из сети. Большинство из них находятся в vb.net, я нуждаюсь в C#. может ли один разместить код ..Получение установленных программ с удаленного хоста с помощью wmi

Это код, я использую

string [email protected]"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"; 
string keyToRead= "DisplayName"; 
ConnectionOptions oConn = new ConnectionOptions(); 
oConn.Username = "Ravinilson"; 
oConn.Password = "ravi"; 

ManagementScope scope = new ManagementScope(@"//" + RemotePC + @"/root/default",  oConn); 
ManagementClass registry = new ManagementClass(scope, new ManagementPath("StdRegProv"), null); 
// Returns a specific value for a specified key 
ManagementBaseObject inParams = registry.GetMethodParameters("GetStringValue"); 
nParams["sSubKeyName"] = regKeyToGet; 
inParams["sValueName"] = keyToRead; 
ManagementBaseObject outParams = registry.InvokeMethod("GetStringValue", inParams, null); 
return outParams["sValue"].ToString(); 

но он дает «ссылка на объект не указывает на экземпляр объекта» ошибка. Я получаю установленные приложения из «Win32_Product». Но он возвращает только продукты Windows. Вот почему я хочу получить данные из реестра «SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall».

+4

Вы были здесь в течение семи месяцев, задавали девять вопросов, никогда не принимали ответа, никогда не подавали голоса, и здесь вы в основном просите нас дать вам код без каких-либо усилий с вашей стороны. Я боюсь, что это не закончится хорошо ... –

+0

oh sorry..если я получил ответ от u, я просто использовал его. Я не знаю, что я должен его принять. – Nagendra

+2

Почему в мире вы не хотели бы использовать документированный способ сделать это? Не ходите на охоту через реестр за вещами. И это чрезвычайно тривиально, чтобы преобразовать код VB.NET в код C#. Вам нужно научиться тратить немного усилий на себя, прежде чем отправлять вопросы. –

ответ

0

Я решил эту проблему, используя приведенный ниже сценарий.

#PRAGMA AUTORECOVER 
[dynamic, provider("RegProv"), 
ProviderClsid("{fe9af5c0-d3b6-11ce-a5b6-00aa00680c3f}"), 
ClassContext("local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows 
\\CurrentVersion\\Uninstall")] 
class InstalledSoftware 
{ 
    [key] string KeyName; 
    [read, propertycontext("DisplayName")]  string DisplayName; 
    [read, propertycontext("DisplayVersion")] string DisplayVersion; 
    [read, propertycontext("InstallDate")]  string InstallDate; 
    [read, propertycontext("Publisher")]  string Publisher; 
}; 

Сохраните сценарий как «.mof» файл. После этого вам нужно скомпилировать этот скрипт, используя команду commandprompt «mofcomp filename.mof». для этого вам нужно иметь привилегии администратора. после компиляции файла вышеуказанный класс «InstalledSoftware» будет добавлен в классы wmi в корне по умолчанию.

Теперь вы сможете получить доступ к установленным приложениям на этом компьютере, используя имя класса «InstalledSoftware» через wmi. Одна сложная вещь заключается в том, что нам нужно скомпилировать вышеупомянутый скрипт на всех удаленных компьютерах, из которых вам нужно получить доступ к установленному программному обеспечению.

Смежные вопросы