好的我已經在這裏找到了這個特定錯誤信息的解決方案。但我的情況稍有不同。我的代碼中沒有「非公共」或「靜態」方法。一切都是公開的。我想要做的是將一個在一個進程中創建的FrameworkElement(更具體地說是一個Web瀏覽器控件)傳遞給另一個進程以供顯示和使用。此外,我沒有使用(並會避免使用)任何框架3.5插件的東西。權限被拒絕:無法遠程調用非公共或靜態方法
每次都在下面一行失敗。
fe = FrameworkElementAdapters.ContractToViewAdapter(tab.ReturnBrowserObject)
tab.ReturnBrowserObject返回其上面的行是假設轉換爲FrameworkElement的一個INativeHandleContract。
編輯:代碼 來自主機進程的相關代碼。
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
'Try
Dim h As EventWaitHandle
g = Guid.NewGuid()
h = New EventWaitHandle(False, EventResetMode.ManualReset, "Tab" & g.ToString)
StartTabProcess()
Dim f As Boolean = h.WaitOne(New TimeSpan(0, 0, 10), False)
If f = False Then
p.Kill()
End If
CreateIPCChannels()
Dim inhc As INativeHandleContract = tabClient.ReturnBrowserObject
fe = FrameworkElementAdapters.ContractToViewAdapter(inhc)
Me.Grid1.Children.Add(fe)
'Catch ex As Exception
' MsgBox(ex.ToString)
'End Try
End Sub
Private Sub StartTabProcess()
Dim str As String = String.Format(CultureInfo.InvariantCulture, "/guid:{0} /id:{1}", New Object() {g, Process.GetCurrentProcess.Id})
p = New Process
p.StartInfo.CreateNoWindow = True
p.StartInfo.UseShellExecute = False
p.StartInfo.Arguments = str
p.StartInfo.FileName = "BrowserTabHost.exe"
p.Start()
End Sub
Private Sub CreateClientIPC()
Dim serverProv As New BinaryServerFormatterSinkProvider()
serverProv.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full
Dim clientProv As New BinaryClientFormatterSinkProvider()
Dim properties As System.Collections.IDictionary = New System.Collections.Hashtable()
properties("name") = "Client"
properties("portName") = g.ToString
properties("typeFilterLevel") = "Full"
properties("exclusiveAddressUse") = "False"
' Create the channel.
Dim serverChannel As New IpcChannel(properties, clientProv, serverProv)
ChannelServices.RegisterChannel(serverChannel, False)
tabClient = DirectCast(Activator.GetObject(GetType(BrowserObject), "ipc://" & g.ToString & "/TabClient"), BrowserObject)
End Sub
而且
<Serializable()> _
Public Class BrowserObject
Inherits MarshalByRefObject
Public ihc As INativeHandleContract
Public ad As Dispatcher
Public handle As IntPtr
Public Delegate Sub ManipulateWB()
Dim newWeb As WebBrowser
Public Delegate Function CreateAndReturnWebInstance()
Public Property Browser As Pajocomo.Windows.Forms.WebBrowserControl
Dim wfh As WindowsFormsHost
Public Sub New()
ad = Dispatcher.Current
End Sub
Public Function ReturnBrowserObject() As INativeHandleContract
Try
ad.DoWork(New CreateAndReturnWebInstance(Function()
newWeb = New WebBrowser
'wfh.Child = newWeb
ihc = FrameworkElementAdapters.ViewToContractAdapter(newWeb)
Return Nothing
End Function))
Return ihc
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Function
Public Sub SetDockSettings()
'Browser.Dispatcher.BeginInvoke(New ManipulateWB(Sub()
' Browser.NavigateToURL("http://neowin.net")
' End Sub))
End Sub
Private Function CreateWebInstance()
' Browser = New Controls.WebBrowser
Return Browser
End Function
End Class
你究竟做了什麼來解決這個問題? – 2017-06-08 19:38:30
相信上面的答案告訴我做了什麼,如果你正在尋找更多的信息......我不記得我已經說過了什麼,並且不能輕易地獲得更多細節的代碼。 由於原來的問題是遠程相關...我想我的實際答案並不能解決原來的問題。 – rstat1 2017-06-10 01:27:36