Здравствуйте, 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 анинсталлишь сервис, демонтируешь шару.
Если подходит, могу фрагменты кода прислать.
Если руки золотые, не важно из какого места они растут.
Всем привет.
Есть задача — надо программно установить msi файл на удаленную машину как это можно сделать кто какие предложит пути решения? Сам Microsoft предлагает использовать WMI Win32_Product class , но для того чтобы его использовать надо установить WMI Windows Installer Provider, а он по умолчанию не ставится на 2003 сервер. Есть еще WindowsInstaller Installer — COM объект который есть в системе и он реализован в msi.dll но этот объект можно создавать только локально, по крайней мере на удаленной машине я так и не смог его создать. Какие еще можно попробовать подходы?
Спасибо за советы и идеи.
Приветствую, Kedrr, вы писали:
K> Всем привет. K> Есть задача — надо программно установить msi файл на удаленную машину как это можно сделать кто какие предложит пути решения?
Если машина в домене, то проще всего через политики.
Привет. Довольно интересный метод. Если есть примеры то буду благодарен.
Спасибо.
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.
Если руки золотые, не важно из какого места они растут.