问题描述
用C#写了一个程序,最后创建安装程序进行了打包。程序中调用了C编写的dll,开发时将这些dll都放到了system32这个路径下。但是在客户环境安装时,客户提出不想手动将这些dll复制到客户环境的system32文件夹,同时也希望卸载时能够完全卸载,不会有所遗留。想问问除了使用[DllImport("***.dll")]这种方式调用system32下的c.dll外,还有没有什么方法可以调用其他位置的c.dll,比如安装路径下的c.dll?帮顶就给分,谢谢
解决方案
解决方案二:
默认就是安装目录下的DLL其次才是System下的你要指定就在[DllImport("D:\XXXXXX***.dll")]
解决方案三:
因为我也不知道安装时会到哪个目录啊,所以“D:\XXXXXX”写了也是没有意义的你的意思就是直接写[DllImport("***.dll")],不用做任何更改了?
解决方案四:
引用2楼mathieuxiao的回复:
因为我也不知道安装时会到哪个目录啊,所以“D:\XXXXXX”写了也是没有意义的你的意思就是直接写[DllImport("***.dll")],不用做任何更改了?
不用呀,C#模认就是先找同一目录下的。找不到再找System下的然后再找Windows下的
解决方案五:
解决方案六:
不用管客户安装到哪个目录了。。打包时把那些Dll都打到exe同名目录下,安装后不一样能运行嘛。
解决方案七:
你调用的时候不是要写路径的嘛,用相对路径就行了,打包的时候dll是和exe在一起的
解决方案八:
当前路径中也可以,对于EXE来讲,就是Exe所在的问题。Web的话有点麻烦,当前路径是windows下的什么。[DllImport("***.dll")]直接文件名,不用谢路径。
解决方案九:
就是Exe所在的路径。
解决方案十:
lz从哪里听来的dll必须要放在system32下的?
解决方案十一:
引用6楼u014247189的回复:
你调用的时候不是要写路径的嘛,用相对路径就行了,打包的时候dll是和exe在一起的
+1
解决方案十二:
楼主的问题解决了吗?求科普
解决方案十三:
1.Path环境变量中的目录2.system323.应用程序当前目录4.assemblyBinding配置节指定,单个程序集可用dependAssembly<runtime><assemblyBindingxmlns="urn:schemas-microsoft-com:asm.v1"><dependentAssembly><assemblyIdentityname="ICSharpCode.SharpZipLib"culture="neutral"publicKeyToken="1b03e6acf1164f73"/><codeBaseversion="0.86.0.518"href="子目录相对路径ICSharpCode.SharpZipLib.dll"/></dependentAssembly></assemblyBinding></runtime>多个dll,可以放到一个子目录中,然后用probing:privatepath指定搜索路径<configuration><runtime><assemblyBindingxmlns="urn:schemas-microsoft-com:asm.v1"><probingprivatePath="bin;bin2subbin;bin3"/></assemblyBinding></runtime></configuration>