小编Con*_*ran的帖子

Delphi XE2 Datasnap会话管理 - 在页面重新加载后获取会话信息

我试图确定如何使用Delphi REST DataSnap服务器检索会话信息.

我知道,当在同一个客户端页面上时,您可以使用TDSSession方法GetThreadSession访问当前线程会话.

但是,我想要做的是在会话中存储数据(putData),并且当用户从page1移动到page2时仍然能够检索它.目前,如果用户移动到不同的页面,会话将丢失并创建一个新会话,从而丢失我之前设置的会话中的数据.

我试过玩TDSSessionManager.SetThreadSession(sessionid) - 但我似乎无法让它工作.

我已经回顾了备受好评的Marco Cantu白皮书,但是,它没有为这个问题提供解决方案.

我能得到的任何帮助都会很棒 - 即使它只是'嘿,这个主题在书X中有所涉及'.

谢谢!

delphi session datasnap delphi-xe2

6
推荐指数
1
解决办法
3783
查看次数

如果应用程序在其他目录中启动父应用程序,则文件I/O无法正常工作

好的 - 这是一个非常奇怪的场景,我在试图找到它的底部时遇到了问题.

我有2个应用程序(简单地说app1和app2)和一个文本文件(txt1).
App1和txt1位于同一目录(例如C:\ APP)中,但app2位于app1目录(C:\ APP\SUB)的子目录中.

当App1启动时,它会使用标准从txt1读取一些内容:

AssignFile(txtFile,'txt1.txt');
Reset(txtFile);
Run Code Online (Sandbox Code Playgroud)

没问题.但是,当App2通过shellexecute命令启动App1时:

shellexecute(0,'open','..\app1.exe',nil,nil,SW_SHOW);
Run Code Online (Sandbox Code Playgroud)

App1似乎无法看到文本文件.我收到回复说"无法找到指定的文件".奇.

我做了调试添加:

if not fileexists('txt1.txt') then
showMessage(ExtractFilePath(application.exename));
Run Code Online (Sandbox Code Playgroud)

这显示了app1(本身)的正确文件路径,那么,为什么'reset'命令会产生'找不到......'错误?我想知道是否使用shellexecute使应用程序以某种方式认为它是从子目录执行而不是它所在的实际目录?

我知道最简单的解决方案是简单地将文件路径添加到我的'app1'打开的每个文件的前面(我试过它,是的,它确实可以正常工作),但是,实际上有数百个这样的文件应用程序通过类似的方法访问(无论是txt,ini还是dll),即根据文件与应用程序在同一目录中分配文件,因此,不设置完全限定的文件路径,因此更改(和维护)它们一切都不是我们此时感兴趣的事情.

以前有没有人见过这样的东西?除了ShellExecute之外,还有更好的方法让App2启动App1吗?没有任何参数或任何东西可以传递给App1,我只需要它来启动.

感谢您的时间 - 请告诉我您是否需要其他任何东西!

delphi file-io shellexecute delphi-xe3

2
推荐指数
1
解决办法
242
查看次数