我有一个针对。net Framework 4.8的应用程序。当在远程桌面机器上的文件资源管理器中使用%temp%
时,我将进入类似于以下路径的
C:UsersUserNameLocalTemp6
,其中6为会话ID。
我的问题是,System.IO.Path.GetTempPath()
方法返回这个值没有会话ID。然而,在。net 6中,它返回带有会话ID的值。
将项目升级到。net 6目前是不可能的,所以我想知道我还能如何解决这个问题?
我建议的解决方案是确定是否在远程会话中使用[DllImport("user32")]
static extern bool GetSystemMetric(int indeX);
const int SM_REMOTESESSION = 0x1000;
var isRemoteSession = GetSystemMetrics(SM_REMOTESESSION);
然后我可以用Path.Combine()
将两者结合起来有没有更好的解决方案?
我没有要测试的远程机器,但我使用了Environment。ExpandEnvironmentVariables获取包含路径令牌的字符串的完整路径。
看看是否适合你。
string query = "%temp%";
string result = Environment.ExpandEnvironmentVariables(query);
正确返回Azure VM上的C:UsersusernameLocalTemp2
和本地机器上的C:UsersusernameAppDataLocalTemp
。我还在控制面板的环境变量中更改了我的Temp路径,它正确返回。