当前位置: 首页 > 知识库问答 >
问题:

SAS-无法从Windows资源管理器加载具有长名称的程序

岳嘉悦
2023-03-14

我正在Windows 7上使用Base SAS 9.4。由于各种原因,我的一些程序的名字非常长,详情如下。更糟糕的是,这些程序被存储在网络驱动器的深渊中。这会在尝试从Windows资源管理器打开时引发问题。我相信问题出在SAS上,但我已经用Windows标记了这个问题,以防万一。我希望有办法通过配置文件或对注册表进行编辑来解决这个问题。

要打开一个程序,我通常会双击。Windows资源管理器中的sas文件。这会在短暂等待一段时间后打开增强型编辑器,其中SAS消息框会显示:

SAS系统正在处理请求。请稍候...

当一个程序的全名(包括路径和扩展名)超过182个字符时(即:格式\\network location\a\bunch\of\..\folders\program path超过182个字符)。sas),会出现相同的“sas系统正在处理请求”消息,但随后会生成Windows错误。

毫不奇怪,Windows没有提供任何解决方案。

当程序名的完整路径正好是182个字符时,什么也不会发生。我双击程序,唯一的结果就是在Windows资源管理器中选择文件。如果我在Windows任务管理器中监视“进程”,则双击此类程序时不会启动新进程。

当程序名称使得完整路径小于182个字符时,程序会按预期在增强编辑器中打开。

根据MSDN,最大路径为260个字符。显然,182远远低于这一限制。SAS是唯一存在路径长度问题的应用程序。例如,我可以复制文件名和扩展名,创建一个同名的新文本文档(plus.txt),并在记事本、记事本、Word、写字板、Emacs等中打开文件。

对于使用超过182个字符的名称,我推导了两种变通方法。如果我通过SAS打开SAS。exe,我可以通过“打开”对话框加载路径超过182个字符的程序。但是,这不是一个好的解决方案,因为“打开”对话框不允许复制/粘贴路径。必须遍历整个文件路径。我还可以将这样的程序拖到SAS的编辑器窗口中加载它。这也不是一个好的解决方案,因为只有当编辑器窗口为空时,程序才会加载。如果程序被意外地拖到日志窗口上,它将自动执行。此外,该程序无法在方便的位置打开。它在增强编辑器的中间打开,必须手动调整大小。这些程序完全可以加载和执行,这让我相信有某种方法可以解决这个问题。似乎在加载文件的过程中,SAS违反了一些变量限制。

当然,人们会建议我使用不同的网络位置或更短的名称。对于前者,我需要使用特定的网络位置。对于后者来说,这些计划正在与各种报告并行开发。许多程序都是类似的,报告中相应的参考(表/图号)会多次更改/并不总是与我沟通。根据经验,我发现处理这些不确定性的最可靠方法就是简单地按照报告中给出的标签命名文件。否则,我需要采用不清楚的缩写、糟糕的组织实践,或者引入中间步骤(比如创建代码或为程序编制索引的文档)。

编辑:根据Joe的评论,打开对话框似乎允许复制和粘贴特定文件名。可以通过Shift右键单击在Windows资源管理器中复制文件路径

为了避免遍历树,可以在访问“打开”对话框之前更新当前文件夹。它位于增强编辑器的右下角。

打开对话框从当前文件夹位置设置为的任何位置开始。


共有1个答案

万喜
2023-03-14

我怀疑你的问题是你的260上限实际上是适用的。

当你双击一个程序文件时,它不仅仅是将路径复制到SAS。相反,发生的是SASOACT。exe被调用,其命令类似于:

"C:\Program Files\SAS94\SASFoundation\9.4\core\sasexe\sasoact.exe" action=Open datatype=Access filename="%1" progid=SAS.Application.940

这本身已经超过100个字符;想必,在幕后,你最终会得到

"C:\Program Files\SAS94\SASFoundation\9.4\core\sasexe\sasoact.exe -open ""%1"""

这会给你传递的信息增加大约70或80个字符。因此,260个字符的限制。

你应该使用其中一种变通方法——我个人更喜欢直接归档-

您还可以考虑要求它将SAS本身安装在路径名较短的位置,但实际上可能会节省大约10个字符。

至于粘贴;您可以像粘贴文件名一样轻松地将路径名粘贴到文件中-

顺便说一下,另一个要考虑的解决方法是将驱动器号映射到网络路径。例如,如果您的网络路径是

//myserver/projects/financial/projectnumber/.../

您将一些字母(比如R:任意)映射到根路径//myserver/projects/financial/projectnumber,除了在本地引用它之外,它不会改变任何东西。然后你可以使用:

R:\...\filename.sas

你不必导航路径等。你必须在任何你想在上面做这件事的机器上重复这个映射过程,但如果这主要是关于你自己的工作流程,那应该不是问题。只是不要在程序本身中提到R:没有人会知道你改变了什么。

 类似资料:
  • 有什么帮助吗?THX~

  • 现在我已经阅读了这里的文档:http://docs.oracle.com/javase/tutorial/uiswing/components/icon.html 但是我仍然不明白...我如何在我的代码中实现它? 我不能将getImage更改为getResources,因为它需要一些东西,我不知道是什么。 编辑:这是图像行现在的样子:图像pic=

  • 我读过https://flutter.dev/docs/development/ui/assets-and-images#asset-包依赖项中的图像和从资产中读取的文本文件,并应用了所有这些,但我的代码仍然无法工作。。。。 我为此打开了一个新项目,在主文件夹中创建了资产和文件: 然后,不信任Android Studio,我检查了vi,在pubspec.yaml一切都好: 该文件以以下内容结尾:

  • 当我调用我的api时,在ios9中遇到了这个错误,但它在ios8中运行良好,资源无法加载,因为应用程序传输安全策略要求使用安全连接

  • 这是我的应用程序的文件夹结构 在我的文件,我像这样加载字体和资源 对于这个,运行将给出退出代码0。 在我家。dart我有以下课程: 我在其他地方使用,以显示图像(代码省略): 这座大楼没有错误。颤振博士-v没有给出任何错误,颤振分析-v也没有给出任何错误。apk似乎构建得很好,但当应用程序在我的手机上打开时,我在asset_bundle中发现以下错误。投掷: 发生异常。错误(无法加载资源:imag

  • 我有一个Laravel应用程序,在我的public/js文件夹中有一些javascript文件。在127.0运行我的应用程序时。0.1:8000/Laravel无法打开JS文件。错误404: 我认为这可能与身份验证有关,所以我已经在public/js文件夹上执行了chmod 777。但那没用。 我把它们输入如下: