Всем привет.
Есть задача — надо программно установить msi файл на удаленную машину как это можно сделать кто какие предложит пути решения? Сам Microsoft предлагает использовать WMI Win32_Product class , но для того чтобы его использовать надо установить WMI Windows Installer Provider, а он по умолчанию не ставится на 2003 сервер. Есть еще WindowsInstaller Installer — COM объект который есть в системе и он реализован в msi.dll но этот объект можно создавать только локально, по крайней мере на удаленной машине я так и не смог его создать. Какие еще можно попробовать подходы?
Спасибо за советы и идеи.
Приветствую, Kedrr, вы писали:
K> Всем привет. K> Есть задача — надо программно установить msi файл на удаленную машину как это можно сделать кто какие предложит пути решения?
Если машина в домене, то проще всего через политики.
Здравствуйте, Kedrr, Вы писали:
K>Всем привет. K>Есть задача — надо программно установить msi файл на удаленную машину как это можно сделать кто какие предложит пути решения? Сам Microsoft предлагает использовать WMI Win32_Product class , но для того чтобы его использовать надо установить WMI Windows Installer Provider, а он по умолчанию не ставится на 2003 сервер. Есть еще WindowsInstaller Installer — COM объект который есть в системе и он реализован в msi.dll но этот объект можно создавать только локально, по крайней мере на удаленной машине я так и не смог его создать. Какие еще можно попробовать подходы? K>Спасибо за советы и идеи.
Чисто RPCшный метод:
1. Маппишь шару программно, используя креды удаленного компа.
2. После этого все WinAPI вызовы на удаленный комп начинают пользовать эти креды.
3. Закидываешь на удаленную машину виндовый сервис (копируешь куда-нибудь, например в С). Чтобы работало везде, сервис не .NET.
4. Коннектишься к SCM на удаленной машине, регаешь сервис, запускаешь его.
5. Все, с этого момента на удаленной машине запущен твой код, делай что хочешь.
6. В конце через SCM анинсталлишь сервис, демонтируешь шару.
Если подходит, могу фрагменты кода прислать.
Если руки золотые, не важно из какого места они растут.
Привет. Довольно интересный метод. Если есть примеры то буду благодарен.
Спасибо.
S>Здравствуйте, Kedrr, Вы писали:
K>>Всем привет. K>>Есть задача — надо программно установить msi файл на удаленную машину как это можно сделать кто какие предложит пути решения? Сам Microsoft предлагает использовать WMI Win32_Product class , но для того чтобы его использовать надо установить WMI Windows Installer Provider, а он по умолчанию не ставится на 2003 сервер. Есть еще WindowsInstaller Installer — COM объект который есть в системе и он реализован в msi.dll но этот объект можно создавать только локально, по крайней мере на удаленной машине я так и не смог его создать. Какие еще можно попробовать подходы? K>>Спасибо за советы и идеи.
S>Чисто RPCшный метод: S>1. Маппишь шару программно, используя креды удаленного компа. S>2. После этого все WinAPI вызовы на удаленный комп начинают пользовать эти креды. S>3. Закидываешь на удаленную машину виндовый сервис (копируешь куда-нибудь, например в С). Чтобы работало везде, сервис не .NET. S>4. Коннектишься к SCM на удаленной машине, регаешь сервис, запускаешь его. S>5. Все, с этого момента на удаленной машине запущен твой код, делай что хочешь. S>6. В конце через SCM анинсталлишь сервис, демонтируешь шару.
S>Если подходит, могу фрагменты кода прислать.
Здравствуйте, Kedrr, Вы писали:
K>Здравствуйте, servancho, Вы писали: K>Привет. Довольно интересный метод. Если есть примеры то буду благодарен. K>Спасибо.
Еще добавлю что метод работает в кроссдомене, даже если домены не трастовые, т.к. не требует имперсонации.
Хотел прямо код прислать, да только там вобщем и слать нечего, по названиям функций все примеры использования находятся в нете.
Реализация основных шагов:
1. Маппинг шары
Смотри описание вызовов WinAPI: WNetAddConnection2, WNetCancelConnection. Именно тут указываются креды на удаленную машину. В последующих вызовах используются они.
2. Виндовый сервис можно подсмотреть в примерах к Windows SDK. Там есть и нативный и .NET.
3. Скопировать файлы на удаленную машину можно любым вызовом, поддерживающим сетевые пути.
4. Инсталляция сервиса:
Смотри описание WinAPI: OpenSCManager, CreateService, CloseServiceHandle, DeleteService. Найдешь примеры кода и как использовать. В .NET есть инсталлер, но он только на локале работает (согласно Reflector).
5. Управление сервисом (старт/стоп). Смотри описание .NET ServiceController. Если надо натив, смотри описалово WinAPI: OpenService, StartService, ControlService.
Если руки золотые, не важно из какого места они растут.