当前位置:编程学习 > C#/ASP.NET >>

难问题,同样的DLL,相同C#代码,有错

用VC6写的DLL,其中有代码访问ACCESS数据库
CDaoDatabase        test;
        test.Open("c:\\imageface.mdb");
if (test.IsOpen())
{
          。。。。。。。。操作
}
test.Close();

此DLL用VC,VB等语言调用运行正常

在C#2005中,建立了webservice服务,调用这个函数
[DllImport("c:\\Recognition.dll")]
    private static extern bool UnInitFace();
 
[WebMethod]
public string systest()
    {
        UnInitFace();
        return "ok";
    }
执行错误如下:错误代码在test.Open

在 System.Runtime.InteropServices.SEHException 中第一次偶然出现的“App_Code.gcqmauky.dll”类型的异常
在 System.Reflection.TargetInvocationException 中第一次偶然出现的“mscorlib.dll”类型的异常
在 System.Reflection.TargetInvocationException 中第一次偶然出现的“System.Web.Services.dll”类型的异常


操作系统win200 pro

第一,WEBservice肯定可以对C盘文件进行读写操作
我的日志就写在C盘,不应该存在没权限访问c:\\imageface.mdb的问题
运行是,通过webservice的debug运行的,没有布置到IIS 

我用c#的对话框程序调用了一下,对的

public partial class Form1 : Form
    {
        [DllImport("c:\\Recognition.dll")]
        private static extern bool UnInitFace();
        [DllImport("c:\\Recognition.dll")]
        private static extern bool Recogn(ref string strimgpath, ref int distone, ref int disttwo, ref int distthree, ref string outimgone, ref string outimgtwo, ref string outimgthree);
   

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            bool ret=UnInitFace();确///////返回正确,没有异常
        }
请高人解答 --------------------编程问答-------------------- 如果是这样我觉得有可能是权限之类的问题,为什么不尝试着改变一下dll文件的路径看是否能够解决此问题?
尽管你的程序拥有对C:\\进行读写的权限,但是你的dll中进行的操作具体需要哪些权限无法明确得知,有可能是在dll中执行发生了类似于没有权限的故障。
--------------------编程问答-------------------- 1,像楼上所说的权限问题
2,是不是因为没有注册dll,先注册dll试试看  --------------------编程问答-------------------- 需要注册DLL?
非托管DLL,直接
[DllImport("c:\\Recognition.dll")]
        private static extern bool UnInitFace(); 

为什么不尝试着改变一下dll文件的路径看是否能够解决此问题? 
换到D盘》?

怪就在于,C#桌面程序调DLL就是对的,就webservice这里不就行了 --------------------编程问答-------------------- "但是你的dll中进行的操作具体需要哪些权限无法明确得知,有可能是在dll中执行发生了类似于没有权限的故障。 "
操作C盘的MDB文件,在webservice中,那里可以设置呢 --------------------编程问答-------------------- 权限^ --------------------编程问答-------------------- 如果是咱设置嘛,老大,指条明路啥 --------------------编程问答-------------------- 帮顶。。。 --------------------编程问答-------------------- 权限在那里设置 --------------------编程问答-------------------- 权限在那里设置 --------------------编程问答-------------------- 极有可能是权限问题。

Web Service 在 IIS 下运行,默认用户是匿名用户。
如果偷懒的话,请试试给你的 DLL 加上 Everyone 的 “读取和运行” 权限。

“权限在哪里设置”?

选中你的 DLL,点击鼠标右键,在弹出菜单中选择“属性”-->点击“安全”选项卡-->
点“添加”按钮-->点“高级”按钮-->点“立即查找”按钮-->找到 Everyone 并选中 -->
“确定”-->“确定”-->选中 Everyone --> 勾选“读取和运行”-->“确定” --------------------编程问答-------------------- 帮顶 --------------------编程问答--------------------
引用 3 楼 ltaotao007_2005 的回复:
怪就在于,C#桌面程序调DLL就是对的,就webservice这里不就行了

一点都不怪...C#桌面程序使用你当前登录的Windows用户(99.999999%的程序员是用Administrators)而WebService是IIS用户...IIS 5是ASP.NET,IIS 6是Network Service... --------------------编程问答-------------------- 楼上的意思是把IIS的两个用户加到administrators组里面就有这个权限了? --------------------编程问答--------------------   web.config:   
  <system.web>  这节中加入  
  .....................加入   
  <identity   impersonate="true"   userName="administrator"   password="yourpassword"></identity>   
  </system.web>    --------------------编程问答-------------------- 可能是在dll中执行发生了类似于没有权限的故障 --------------------编程问答-------------------- 是的,我在DLL中有检查文件是否存在代码,在webservice中运行就报错的

是有类似于没有权限的故障 --------------------编程问答-------------------- 分析器错误信息: 未能从配置文件中指定的凭据创建 Windows 用户标记。源自操作系统的错误“客户没有所需的特权。


源错误: 


行 12:  <connectionStrings/>
行 13:  <system.web>
行 14:     <identity  impersonate="true"  userName="Administrator"  password="taotao"/>

 
--------------------编程问答-------------------- 友情帮顶,和谐接分 --------------------编程问答-------------------- 试一试给NETWORK SERVICE 和ASP.NET C盘的读写权限。
右键点击C: -> Properties -> Security -> Add...
加入NETWORK SERVICE和ASP.NET,并check modity.
--------------------编程问答-------------------- 分析器错误信息: 未能从配置文件中指定的凭据创建 Windows 用户标记。源自操作系统的错误“客户没有所需的特权。


源错误:


行 12: <connectionStrings/>
行 13: <system.web>
行 14:    <identity  impersonate="true"  userName="Administrator"  password="taotao"/>

怎么报错呢 --------------------编程问答-------------------- 我把ASP.net IUSR这两个用户都加到administrator组中了,还是没有权限,奇怪 --------------------编程问答-------------------- 追加两个用户
一个是aspnet用户
一个是serveice用户 --------------------编程问答-------------------- win2000 IIS5

aspnet
serveice
iusr

三个用户都已加到administrator组中了

一样没权限,报HTTP500错误 --------------------编程问答-------------------- 我觉得也是权限问题,但是在webservice里面,最好不要用绝对路径去加载或者下载什么东西,改成相对路径会好点
而且不容易出问题 --------------------编程问答-------------------- 这个好像不是绝对路径,相对路径的问题


我在DLL中原本有检查文件是否存在的代码,在WEB中调用都通过不过的
后面只好没要 --------------------编程问答-------------------- 此贴无答案,继续顶 --------------------编程问答-------------------- 现在发现一个问题,是否不是权限的问题这么简单
我在DLL中,用deletefile("c:\\imageface.mdb"),WEB执行是可以的
对C盘的读写是可以的,没有问题


CDaoDatabase        test;
test.Open("c:\\imageface.mdb"); 这句就不行了,也就是说,MFC的CDaoDatabase 类操作不行而已

这是为什么呢?权限》需要用MDAC?》没道理呀,我的天,郁闷的很
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,