用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\十万火急!!!
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