首页 新闻 会员 周边 捐助

windows服务loadlibrary dll 失败

0
悬赏园豆:20 [已解决问题] 解决于 2015-07-03 13:59

winform程序, 调用dll方式如下,dll路径为指定了绝对路径

1       [DllImport("kernel32.dll")]
2   private extern static IntPtr LoadLibrary(String path);
3   [DllImport("kernel32.dll")]
4   private extern static IntPtr GetProcAddress(IntPtr lib, String funcName);
5   [DllImport("kernel32.dll")]
6   private extern static bool FreeLibrary(IntPtr lib);

 

winform运行可以成功加载dll,并成功执行。
现在把winform注册成了windows服务,并指定用户为超级管理员administrator,调试的时候发现,IntPtr hLib = LoadLibrary("E:\\abc.dll");
hLib 一直为0,getlasterror未发现错误,求解。

Frida-的主页 Frida- | 初学一级 | 园豆:80
提问于:2015-07-02 16:12
< >
分享
最佳答案
0

[DllImport("kernel32.dll",SetLastError=true)]

收获园豆:20
Launcher | 高人七级 |园豆:45050 | 2015-07-02 16:19

找到错误提示了:%1 不是有效的 Win32 应用程序。

编辑的wf为x86,引用的dll也是32位的,解决方案里的其他工程都是any cpu,手动运行winform是32位的,可以正确加载外部dll。用服务启动的话,进程默认为64位,引用dll就报错了。

现在尝试把解决方案里的工程全部改为x86输出的话,服务就没办法启动了,提示:试图加载格式不正确的程序...。

无语

Frida- | 园豆:80 (初学一级) | 2015-07-02 17:24

@Frida-: 用 32 位版本的 InstallUtil 安装服务。

Launcher | 园豆:45050 (高人七级) | 2015-07-03 09:26
其他回答(1)
0

出现这种情况只有两种可能:

1. 权限问题,查看下服务是否跑在合适的上下文。

2. 依赖的dll是静态的,如果是静态的那本身就是无法加载的,只能修改成动态链接 

visonme | 园豆:1674 (小虾三级) | 2015-07-02 16:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册