【问题标题】:Searching for External Programs搜索外部程序
【发布时间】:2011-04-07 15:34:29
【问题描述】:

我们正在开发一个 WPF 应用程序,它将与其他应用程序紧密协作。现在,它正在使用 Microsoft Excel。

我想在安装我们的 WPF 应用程序时运行一些自定义代码,以扫描用户的计算机并找到 Excel 的位置,以便我可以将其保存在 WPF 程序的 app.config 文件中。稍后,当我们需要启动 Excel 编辑文件时,我将使用配置文件中的此路径传递给 Process.Start()。

我不想创建 Excel 加载项或模板(不是一个选项,因此不建议将此作为答案)。

我们需要担心哪些安全问题?这个方案是“犹太洁食”吗?如果我尝试使用另一个没有 Excel 那么多插件能力的应用程序怎么办?您建议使用哪些方法来查找和启动此应用程序?简单地要求用户定位程序而不是在文件系统中搜索它会更好吗?

编辑:有人想讨论一般问题吗?如果我没有启动 Excel,而是启动其他一些工具(iTunes、Audacity 等)怎么办?没有人讨论或谈论过安全问题。可以搜索可执行文件吗?我应该只问用户在哪里可以找到它吗?/Edit

【问题讨论】:

    标签: .net wpf security filesystems external-process


    【解决方案1】:

    安装路径在注册表中:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Excel\InstallRoot

    14.0 可能因版本而异。

    编辑: 一般来说,大多数安装程序将允许用户在他们想要的任何位置安装应用程序,因此应用程序可执行文件可以在任何文件夹中的任何磁盘上,因此只有递归搜索所有驱动器上的所有文件夹(在搜索常见安装路径之后)将是查找可执行文件的可靠方法。

    因此,IMO 最好向用户显示浏览对话框并允许他们自行定位可执行文件。

    【讨论】:

    • 适用于 Excel,但不适用于我们可能使用的任何应用程序。此外,我怎么知道要查找哪个版本?
    • @Josh G,无需应用程序即可插入注册表数据。无法保证您会以一种统一的方式找到应用程序。为什么不看看您的应用程序将如何使用默认安装并从那里开始?
    • 关键是要找到一个通用的接口/方法来查找这些可执行文件。我认为文件系统是唯一的共同点。所有程序都必须驻留在文件系统中的某个位置。
    • 我认为您应该向用户显示浏览对话框并允许他找到可执行文件。除了递归搜索所有磁盘上的所有文件夹之外,没有可靠的方法可以找到可执行文件,这可能需要很长时间。例如,我的 M$ Office 安装根目录是 D:\Programs\Office,因为我的主驱动器是一个小型 SSD 启动驱动器,因此所有较大且不常用的应用程序都位于大 D: 驱动器上。我在那里安装了一些其他程序,它们甚至没有注册表项,因此递归目录搜索将是找到它们的唯一方法......
    • 这是完美的。如果您可以编辑您的答案并添加它,我会将其标记为答案。我认为我们将不得不尝试隔离具有注册表项的应用程序并使用它。否则用户可能不得不浏览。
    【解决方案2】:

    由于 Excel 的路径已在“PATH”环境变量中注册,我原以为使用文件路径参数运行“excel.exe”应该可以工作。

    或者您可以查找注册表并找出与之关联的“打开方式”应用程序,并建议使用哪个应用程序(可选 make 作为您的应用程序的默认设置)。

    【讨论】:

    • "excel.exe" 对我不起作用。我打开 CommandPrompt 并输入它并得到“无法识别”。
    • “打开方式”与什么相关联?听起来你假设我将打开一个指定的文件。
    • @Josh 是的,就像你对文本文件执行“打开方式”一样,它应该是所有可以打开它的可用应用程序列表,我认为它存储在某个地方的注册表中
    • 事实证明您对“excel.exe”的看法是正确的,但这并不适合一般情况。
    猜你喜欢
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多