用Request.PathTranslated获得的是IIS的物理路径,但如果DLL文件不在IIS所指定的主目录下,而是通过虚拟目录的方法时,就不正确了。如:
-----------------------------------------------------
IIS的主目录是在:C:\WWWRoot\
DLL文件是在:D:\ISAPI\在IIS中建立虚拟目录,指向D:\ISAPI\,这时Request.PathTranslated获得的是C:\WWWRoot\,用Application.Exepath等函数也不能正常获得,请问如何获得该DLL文件的真实路径,即:D:\ISAPI\十万火急!!!
-----------------------------------------------------
IIS的主目录是在:C:\WWWRoot\
DLL文件是在:D:\ISAPI\在IIS中建立虚拟目录,指向D:\ISAPI\,这时Request.PathTranslated获得的是C:\WWWRoot\,用Application.Exepath等函数也不能正常获得,请问如何获得该DLL文件的真实路径,即:D:\ISAPI\十万火急!!!
解决方案 »
- 三层结构 调用Clientdataset.Append 时会将所有的记录重新刷新一遍,效率太慢了,如何解决??
- 【急】关于webbrowser的问题,各位大侠进来指教下,谢谢!!!
- 线程问题:调用的代码在哪里执行的?
- 把二进制文件的内容读到MEMO中去??
- 程序运行后报错,错误提示如文:
- 导出Excel文件格式,为什么只有退出程序,才能打开Excel,是否可以不退出就打开,超难!各位大侠帮忙!
- delphi cti高手请进
- 在这种情况下怎样实现登录到服务器
- DBNavigator控件問題,一定給您加分。
- 仇深似海,为什么女人会这样!!!!!!!!!!!!!!!!!!
- 各位师长们,你们有没有以下的东东呀.
- 有用linux的吗?我的系统起不来了!!!
var
dbINI: TIniFile;
ModuleFileName: array[0..255] of char; // 保存Dll名称
connectstring, dbuser, dbpassword, dbserver, dbname, path: string;
begin
//{取得dll的实际位置}
GetModuleFileName(GetModuleHandle('PAccessData.dll'), @ModuleFileName[0],
SizeOf(ModuleFileName));
path := ExtractFilePath(ModuleFileName) + 'config.dll'; // 取得该目录下ini文件
dbINI := TIniFile.Create(path); //建立ini文件存取类
connectstring := '';
dbuser := dbINI.ReadString('shangbao', 'dbuser', ''); //数据库登录用户
dbpassword := dbINI.ReadString('shangbao', 'dbpassword', ''); //数据库登录密码
dbname := dbINI.ReadString('shangbao', 'dbname', ''); //数据库库名
dbserver := dbINI.ReadString('shangbao', 'dbserver', ''); //数据库实例名称 connectstring := connectstring + 'Provider=SQLOLEDB.1;';
connectstring := connectstring + 'Persist Security Info=False;';
connectstring := connectstring + 'User ID=' + dbuser + ';';
connectstring := connectstring + 'Initial Catalog=' + dbname + ';';
connectstring := connectstring + 'Data Source=' + dbserver; //连接参数字符串
ADOConnection1.keepconnection := True;
ADOConnection1.loginprompt := False;
ADOConnection1.ConnectionString := connectstring;
ADOConnection1.Open(dbuser, dbpassword);
dbINI.Free;
end;
SizeOf(ModuleFileName));//我这里的dll是'PAccessData.dll',你写上你的dll名称,不过有个缺点,你的dll名称是定死的,不知道大家怎么解决的?
Copy(Request.URL,LastDelimiter('/',Request.URL)+1,Length(Request.URL)-LastDelimiter('/',Request.URL)+1)
就可以了。我为了省事才这样写,你再分开它吧!
还有点问题:将生成的DLL文件分别复制到其它盘的两个不同的文件夹下,再将两个文件夹都指定为虚拟目录,在浏览器打开后,两个程序返回的路径相同,浏览器先访问那个DLL,就显示该DLL的路径,另一个也显示该路径,然后再怎么刷新都不管用,除非重启IIS。
加个PageProducer1,
procedure TWebModule1.WebModuleCreate(Sender: TObject);
begin
PageProducer1.HTMLDoc.CommaText :=
'<htnl>'
+'<title>knptn'
+'</title>'
+'<body>'
+ '</p>' + gsapppath + '</P>'
+'</body>'
+'</html>';
end;可以看到project.dll 在计算机中的路径.
在intraweb中, gsapppath也是用于isapi module