所以我有以下代码:,一个安全异常
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetDllDirectory(string dllPath);
在功能:
SetDllDirectory(@"G:\Sean\Debug\");
Assembly loadedDLL = Assembly.LoadFrom(@"G:\Sean\Debug\BonderControlPanelSim.dll", AppDomain.CurrentDomain.Evidence);
Type rtsObj = loadedDLL.GetType("Oe.Te.Ranorex.Instrument.BonderControlPanelSim");
Object obj = Activator.CreateInstance(rtsObj);
rtsObj.InvokeMember("Initialize", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, obj, new object[] { "COM3", 1, 2 });
rtsObj.InvokeMember("PushStart", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, obj, new object[] { 3 });
rtsObj.InvokeMember("Shutdown", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, obj, null);
然而,当我运行一个小的应用程序从眼前这个功能与DLL相同的文件夹,没有问题。当我将可执行文件移动到另一台具有G驱动器映射的计算机时,出现安全异常。
<IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Flags="UnmanagedCode"/>
不知道该如何处理。在Assembly.LoadFrom我通过证据。
在第一个rtsObj.InvokeMember引发异常。
感谢您的帮助!
编辑:应用程序实际上无法在其他机器上启动。如果我的机器上只有它自己的可执行文件,它将启动。
的PInvoke的是另一个DLL需要在此应用 – 2010-11-11 18:31:44
很好用的多数民众赞成在一个非托管的组件,如果组件从网络共享调用,那么它也将草草收场时,它试图为P失败/ Invoke的。您将**拥有**来更改.NET安全策略,或将程序集复制到机器本地卷以供运行时允许任何* P /调用。 – cdhowie 2010-11-11 18:35:27