Знаю ID процесса... что дальше?
От: agendus  
Дата: 19.11.08 11:26
Оценка:
Добрый день.
Вопрос такой. У меня есть информация о процессе — структура PROCESS_INFORMATION. Взялась такая радость благодаря выполнению ф-ции :

Res = CreateProcessWithLogonW(StrPtr(sUsername), StrPtr(sDomain), StrPtr(sPwd), _
                                  LOGON_NETCREDENTIALS_ONLY, _
                                  0&, StrPtr(sCmd), _
                                  0&, _
                                  ByVal 0&, _
                                  StrPtr(sDir), _
                                  SInfo, PInfo)
, где PInfo — как раз PROCESS_INFORMATION. Теперь интересно, чем мне может помощь информация о запущенном процессе. А НУЖНО следующее. Выше я запустил под другим пользователем приложение Excel. И теперь в этом приложении нужно открыть файл — а для этого до приложения надо как-то достучаться. Вот как, если я знаю только id процесса? Есть идея по id узнать HWND, но я пока не знаю как...

Примечание. Если сразу открывать нужный файл внутри функции — не получается. Отчасти может потому, что у ТЕКУЩЕГО пользователя доступа к директории и файлу НЕТ! Доступ только у пользователя, под которым открывается Excel. Вот поэтому все это и затеял
Re: Знаю ID процесса... что дальше?
От: Lonely Dog Россия  
Дата: 19.11.08 11:48
Оценка:
Здравствуйте, agendus, Вы писали:

Может просто передать имя нужного файла через командную строку?
Re[2]: Знаю ID процесса... что дальше?
От: agendus  
Дата: 19.11.08 12:05
Оценка:
Здравствуйте, Lonely Dog, Вы писали:

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


LD>Может просто передать имя нужного файла через командную строку?


Я же говорю — пробовал так. Файл не открывается. Когда я программно открываю новый Excel под др. пользователем, а потом РУКАМИ открываю в нем нужный файл — он открывается. Вот поэтому и хочу после запуска получить доступ к объекту Excel, имея на входе ID процесса.
Re[3]: Знаю ID процесса... что дальше?
От: Ovl Россия  
Дата: 19.11.08 12:08
Оценка:
Здравствуйте, agendus, Вы писали:

A>Здравствуйте, Lonely Dog, Вы писали:


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


LD>>Может просто передать имя нужного файла через командную строку?


A>Я же говорю — пробовал так. Файл не открывается. Когда я программно открываю новый Excel под др. пользователем, а потом РУКАМИ открываю в нем нужный файл — он открывается. Вот поэтому и хочу после запуска получить доступ к объекту Excel, имея на входе ID процесса.


совсем-совсем не получается? а что говорит?
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[4]: Знаю ID процесса... что дальше?
От: agendus  
Дата: 19.11.08 12:17
Оценка:
Здравствуйте, Ovl, Вы писали:

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


A>>Здравствуйте, Lonely Dog, Вы писали:


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


LD>>>Может просто передать имя нужного файла через командную строку?


A>>Я же говорю — пробовал так. Файл не открывается. Когда я программно открываю новый Excel под др. пользователем, а потом РУКАМИ открываю в нем нужный файл — он открывается. Вот поэтому и хочу после запуска получить доступ к объекту Excel, имея на входе ID процесса.


Ovl>совсем-совсем не получается? а что говорит?


"Говорит" уже запущенный Excel — что дескать нет такого файла, надо бы проверить правильность имени и пути. Но! ФАЙЛ ЕСТЬ И ИМЯ ПРАВИЛЬНОЕ!!!
Re[5]: Знаю ID процесса... что дальше?
От: Ovl Россия  
Дата: 19.11.08 12:33
Оценка:
Здравствуйте, agendus, Вы писали:

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


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


A>>>Здравствуйте, Lonely Dog, Вы писали:


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


LD>>>>Может просто передать имя нужного файла через командную строку?


A>>>Я же говорю — пробовал так. Файл не открывается. Когда я программно открываю новый Excel под др. пользователем, а потом РУКАМИ открываю в нем нужный файл — он открывается. Вот поэтому и хочу после запуска получить доступ к объекту Excel, имея на входе ID процесса.


Ovl>>совсем-совсем не получается? а что говорит?


A>"Говорит" уже запущенный Excel — что дескать нет такого файла, надо бы проверить правильность имени и пути. Но! ФАЙЛ ЕСТЬ И ИМЯ ПРАВИЛЬНОЕ!!!


если он пытается открыть файл, то значит он уже запущен. полагаю со всеми нужными правами проблема в имени файла или в процессе запуска?
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[6]: Знаю ID процесса... что дальше?
От: agendus  
Дата: 19.11.08 12:54
Оценка:

если он пытается открыть файл, то значит он уже запущен. полагаю со всеми нужными правами проблема в имени файла или в процессе запуска?

Вот и я полагаю, что после запуска Excel уже есть нужные права доступа. Сообщение о невозможности открыть файл я вижу уже при активном Excel.
Re[6]: Знаю ID процесса... что дальше?
От: agendus  
Дата: 19.11.08 12:58
Оценка:
У меня есть локальная копия нужного файла — только что открыл его без проблем — значит проблема НЕ В ИМЕНИ ФАЙЛА. ...и не в пути — путь я задаю верный 100%
Re[7]: Знаю ID процесса... что дальше?
От: Leonid Troyanovsky  
Дата: 19.11.08 13:02
Оценка: +1
Здравствуйте, agendus, Вы писали:

A>У меня есть локальная копия нужного файла — только что открыл его без проблем — значит проблема НЕ В ИМЕНИ ФАЙЛА. ...и не в пути — путь я задаю верный 100%


Путь закавычь.
--
С уважением, LVT
Re[7]: Знаю ID процесса... что дальше?
От: Ovl Россия  
Дата: 19.11.08 13:09
Оценка:
Здравствуйте, agendus, Вы писали:


A>

A>если он пытается открыть файл, то значит он уже запущен. полагаю со всеми нужными правами проблема в имени файла или в процессе запуска?

A>Вот и я полагаю, что после запуска Excel уже есть нужные права доступа. Сообщение о невозможности открыть файл я вижу уже при активном Excel.

может тогда impersonate попробовать?
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[8]: Знаю ID процесса... что дальше?
От: agendus  
Дата: 19.11.08 13:16
Оценка:
Здравствуйте, Ovl, Вы писали:

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



A>>

A>>если он пытается открыть файл, то значит он уже запущен. полагаю со всеми нужными правами проблема в имени файла или в процессе запуска?

A>>Вот и я полагаю, что после запуска Excel уже есть нужные права доступа. Сообщение о невозможности открыть файл я вижу уже при активном Excel.

Ovl>может тогда impersonate попробовать?


То есть? Что это значит?
Re[8]: Знаю ID процесса... что дальше?
От: agendus  
Дата: 19.11.08 13:20
Оценка:
Здравствуйте, Leonid Troyanovsky, Вы писали:

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


A>>У меня есть локальная копия нужного файла — только что открыл его без проблем — значит проблема НЕ В ИМЕНИ ФАЙЛА. ...и не в пути — путь я задаю верный 100%


LT>Путь закавычь.


Если Вы об этом:

fName = "G:\PROJECTS\price list.xls"
CmdLine = "excel " & Chr(34) & fName & Chr(34) &
, так сделано уже — закавычил Кстати, засада может быть в том, что имя файла с пробелами? Здесь оно вымышлено — но суть та же — имя С ПРОБЕЛАМИ, блин, и не мне это менять.
Re[9]: Знаю ID процесса... что дальше?
От: Ovl Россия  
Дата: 19.11.08 13:29
Оценка:
Здравствуйте, agendus, Вы писали:

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


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



A>>>

A>>>если он пытается открыть файл, то значит он уже запущен. полагаю со всеми нужными правами проблема в имени файла или в процессе запуска?

A>>>Вот и я полагаю, что после запуска Excel уже есть нужные права доступа. Сообщение о невозможности открыть файл я вижу уже при активном Excel.

Ovl>>может тогда impersonate попробовать?


A>То есть? Что это значит?


я имел ввиду явный логон (LogonUser). Но возможно это не поможет.

Можно скопировать этот файл туда, куда пользователь имеет доступ?
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[10]: Знаю ID процесса... что дальше?
От: agendus  
Дата: 19.11.08 13:37
Оценка:
Здравствуйте, Ovl, Вы писали:

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


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


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



A>>>>

A>>>>если он пытается открыть файл, то значит он уже запущен. полагаю со всеми нужными правами проблема в имени файла или в процессе запуска?

A>>>>Вот и я полагаю, что после запуска Excel уже есть нужные права доступа. Сообщение о невозможности открыть файл я вижу уже при активном Excel.

Ovl>>>может тогда impersonate попробовать?


A>>То есть? Что это значит?


Ovl>я имел ввиду явный логон (LogonUser). Но возможно это не поможет.


Ovl>Можно скопировать этот файл туда, куда пользователь имеет доступ?


Думаю о варианте LogonUser -> CreateProcessAsUser вместо CreateProcessWithLogonW... но разве суть не одна и та же? То есть сначала гарантированно залогиниться под новым пользователем, и потом уж этот hToken передавать для запуска? Есть еще вариант SHCreateProcessAsUserW... блин весь API не перероешь. Вот найти бы функцию, которая из ID процесса даст доступ к объекту.
А копировать файл туду где есть доступ нельзя. Можно б было — вся эта заваруха и не поднималась бы
Re[11]: Знаю ID процесса... что дальше?
От: Ovl Россия  
Дата: 19.11.08 13:42
Оценка:
A>Думаю о варианте LogonUser -> CreateProcessAsUser вместо CreateProcessWithLogonW... но разве суть не одна и та же? То есть сначала гарантированно залогиниться под новым пользователем, и потом уж этот hToken передавать для запуска? Есть еще вариант SHCreateProcessAsUserW... блин весь API не перероешь. Вот найти бы функцию, которая из ID процесса даст доступ к объекту.
A>А копировать файл туду где есть доступ нельзя. Можно б было — вся эта заваруха и не поднималась бы

дело в том, что по умолчанию excel наверное запускается по DDE
Посмотрите заметку http://www.vadriano.com/excel-vb/2007/04/12/how-to-open-excel-files-in-a-new-application-instance/, и сравните со своими настройками Open для Excel.

Попробуйте вместо "excel <somefile>" использовать "<fullexcelpath>/excel.exe <somefile>"
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[12]: Знаю ID процесса... что дальше?
От: Ovl Россия  
Дата: 19.11.08 13:45
Оценка:
Ovl>Попробуйте вместо "excel <somefile>" использовать "<fullexcelpath>/excel.exe <somefile>"

правда в этом случае он может сказать что какой-нить personal.xlb залочен, но это уже другая история.
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[12]: Знаю ID процесса... что дальше?
От: agendus  
Дата: 19.11.08 13:49
Оценка:
Здравствуйте, Ovl, Вы писали:

A>>Думаю о варианте LogonUser -> CreateProcessAsUser вместо CreateProcessWithLogonW... но разве суть не одна и та же? То есть сначала гарантированно залогиниться под новым пользователем, и потом уж этот hToken передавать для запуска? Есть еще вариант SHCreateProcessAsUserW... блин весь API не перероешь. Вот найти бы функцию, которая из ID процесса даст доступ к объекту.

A>>А копировать файл туду где есть доступ нельзя. Можно б было — вся эта заваруха и не поднималась бы

Ovl>дело в том, что по умолчанию excel наверное запускается по DDE

Ovl>Посмотрите заметку http://www.vadriano.com/excel-vb/2007/04/12/how-to-open-excel-files-in-a-new-application-instance/, и сравните со своими настройками Open для Excel.

Ovl>Попробуйте вместо "excel <somefile>" использовать "<fullexcelpath>/excel.exe <somefile>"


Непонятно, как это может влиять. Попробовал — прописал полный путь к excel.exe — та же петрушка...
Re[9]: Знаю ID процесса... что дальше?
От: Сергей  
Дата: 19.11.08 14:10
Оценка:
Здравствуйте, agendus, Вы писали:

A>
A>fName = "G:\PROJECTS\price list.xls"
A>CmdLine = "excel " & Chr(34) & fName & Chr(34) & 
A>


Я в VB не силён, но всё же — может, бэкслеши экранировать надо?
Re[10]: Знаю ID процесса... что дальше?
От: agendus  
Дата: 19.11.08 14:19
Оценка:
Здравствуйте, Сергей, Вы писали:

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


A>>
A>>fName = "G:\PROJECTS\price list.xls"
A>>CmdLine = "excel " & Chr(34) & fName & Chr(34) & 
A>>


С>Я в VB не силён, но всё же — может, бэкслеши экранировать надо?



Да нет, не надо... хотя я попробовал — чем черт не шутит
Re[13]: Знаю ID процесса... что дальше?
От: Ovl Россия  
Дата: 19.11.08 16:03
Оценка:
кстати, а почему не использовать Process.Start и ProcessStartInfo, если уж вы пишите на VB?
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.