Sua mais melhor fonte da informação e da notícia aproximadamente software, ferragem e Ferragem de Vista no Internet

ARTIGOS de Vista ALTO 50 Vista VIDEOS Vista MACIO AJUDA de Vista

Caos da prancheta!


Nota: este índice originalmente de http://mygreenpaste.blogspot.com. Se você for leitura ele de algum outro local, faça exame por favor do momento de visitar Minha pasta verde, Inc. Obrigado.

A APROVAÇÃO, assim que talvez caos é um pouco uma palavra áspera aqui. Mas a prancheta dirigia-me recentemente porcas! Tudo que eu estava tentando fazer era lhe copí algum texto, e a operação estava falhando. Naturalmente, porque era um app ad hoc, eu não tive nenhum tipo da manipulação de erro. O app trabalhou a multa justa em um sistema, mas funcionar o app em um outro sistema (uma máquina virtual) resultou consistentemente na falha copí o texto à prancheta.

Finalmente, eu podia determinar que processo impedia que meu app ponha dados na prancheta, mas eu não encontrei ainda um workaround decent para quando o problema acontece. Não é crítico para mim, como o ato de copí o texto à prancheta é mais de um nicety do que uma exigência.

Em todo o caso, usando P/Invoke e System.Diagnostics, Eu encontrei que vmusrvc.exe - o PC virtual “usuário virtual da máquina presta serviços de manutenção” - teve a prancheta aberta. Usando os timestamps de Monitor Process's que perfilam os eventos (gerados em 100 intervalos do ms), e o timestamp da operação falhada de meu app, eu podia determinar a pilha de vmusrvc.exe:

ntdll.dllKiFastSystemCallRet
vmusrvc.exevmusrvc.exe + 0x9a17
vmusrvc.exevmusrvc.exe + 0x9c24
vmusrvc.exevmusrvc.exe + 0x91f8
vmusrvc.exevmusrvc.exe + 0x907f
USER32.dllInternalCallWinProc + 0x28
USER32.dllUserCallWinProcCheckWow + 0x150
USER32.dllDispatchClientMessage + 0xa3
USER32.dll__fnDWORD + 0x24
ntdll.dllKiUserCallbackDispatcher + 0x13
vmusrvc.exevmusrvc.exe + 0x2d29
vmusrvc.exevmusrvc.exe + 0xdba6
kernel32.dllBaseProcessStart + 0x23

Nenhum parâmetro, naturalmente, e a informação do símbolo para vmusrvc.exe não parece estar disponível, mas obviamente user32.dll está processando alguma mensagem. Eu posso olhar neste mais em um ponto mais atrasado.

Para encontrar o processo que estava interferindo com meu trabalho da prancheta, eu usei P/Invoke chamar-se GetOpenClipboardWindow() e então GetWindowThreadProcessId(), passando no punho retornado por GetOpenClipboardWindow (). Então, encontrar o nome executável dos processos era apenas uma matéria de usar-se Módulos coleção do Processo o exemplo retornou passando na identificação process recuperada por GetWindowThreadProcessId () a System.Diagnostics.Process.GetProcessById().

O seguinte código:

usando System.Runtime.InteropServices;
usando System.Diagnostics;
...
amarre dados = do “al do kajsdlkj do alkjsdl aasdlkjasdlk”;
tentativa
{
Clipboard.SetData (System.Windows.Forms.DataFormats.Text, dados);
}
prendedor (ee de ExternalException)
{
LogIt (ee.ToString ());
hWnd = GetOpenClipboardWindow de IntPtr ();
se (IntPtr.Zero! = hWnd)
{
pid do uint = 0;
tid do uint = GetWindowThreadProcessId (hWnd, para fora pid);
LogIt (“processo com hWnd {0}, PID {1} ({1: x}), TID {2} ({2: x}),” +
"name {3} has the clipboard", hWnd, pid, tid,
Process.GetProcessById( (int)pid ).Modules[0].FileName );
}
}

Resulted in the following output:


2008-03-25 00:54:45.4938864--> System.Runtime.InteropServices.ExternalException: Requested Clipboard operation did not succeed.
at System.Windows.Forms.Clipboard.ThrowIfFailed(Int32 hr)
at System.Windows.Forms.Clipboard.SetDataObject(Object data, Boolean copy, Int32 retryTimes, Int32 retryDelay)
at System.Windows.Forms.Clipboard.SetData(String format, Object data)
at Clippy.Form1.button1_Click(Object sender, EventArgs e)
2008-03-25 00:54:45.5339440--> Process with hWnd 65716 (65716), PID 1492 (5d4), TID 1496 (5d8), name C:\Program Files\Virtual Machine Additions\vmusrvc.exe has the clipboard

Interestingly, trying an alternative method of the Clipboard to set the content also failed. The Clipboard.SetDataObject() overload that takes a retryTimes and retryDelay parameter failed in the same fashion after roughly ten seconds when invoked as follows:


Clipboard.SetDataObject( data, false, 100, 100 );

I tried variations on retryTimes and retryDelay, to no avail.

Not sure what vmusrvc.exe is doing with the clipboard (probably has to do with monitoring it for host / guest VM interaction), but the act of setting the contents of the clipboard didn't fail 100% of the time in the VM. Often enough to make it extremely unreliable, though. During "normal" system usage, I was not able to cause a failure when running the app on a non-virtual (actual?) system.

Popularity: 2%


Written by «/\/\Ø|ö±ò\/»®©. Read more great feeds at is source WEBSITE
no comments.
Read more articles on P/Invoke and GetOpenClipboardWindow and System.Diagnostics and Clipboard and GetWindowThreadProcessId and Process Monitor and c# and processes and Virtual Machine and otherSoftware and Virtual PC.

No comments

There are still no comments on this article.

Leave your comment...

If you want to leave your comment on this article, simply fill out the next form:




You can use these XHTML tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong> .