0

我编写了一个可以在网络上运行的 win 应用程序。

在其中一种形式中,用户可以浏览并从本地计算机中选择文件并将其添加到列表中,因此应用程序将这些文件复制到“网上邻居”中的一个文件夹中,没有用户可以访问它,但我已经为我创建了一个应用程序,所以我有他的用户名和密码。到目前为止,一切正常。

在此表单中,用户还可以通过选择文件并按打开按钮打开文件,因此文件应在与其扩展名相关的应用程序中打开(例如 test.xlsx 应在 Exel.exe 中打开)。我使用过 Process.Start () 这样做,但对于每个扩展,我都会收到一个单独的错误(例如,记事本的“访问被拒绝”和 Adob ​​eReader的“运行时错误”和Excel的“内存不足” )。

我的错误是什么?

注意: 我已使用 ImpersonatUser 在我的应用程序中登录该用户。

编辑:我使用以下代码打开文件:

Using(WindowsImpersonationContext impersonateUser = LogonMethod())
{
    ProcessStartInfo pInfo = new ProcessStartInfo(filePathWithExtension);
    pInfo.Domain = MyDomainName;
    pInfo.UseShellExecute = false;
    Process.Start(pInfo);
}

注意: 我的 LogonMethod 使用 advapi32.dll 的 LogonUser 方法。

4

2 回答 2

0

您看到的行为几乎是预期的。

  • 看起来您不是直接启动应用程序,而是使用文件名关联进行评估。我不相信你会在你想要的帐户下启动应用程序。您可以使用任务管理器检查正在运行的帐户应用程序。
  • 大多数应用程序都没有经过测试以在“运行方式”上下文中运行,因此它们可能正常工作或随机失败。
于 2012-06-30T20:19:30.443 回答
0

我无法解决这个问题,所以我使用了另一种方法。我已将文件复制到临时文件夹,然后用于Process.Start打开这个新文件。

于 2012-07-09T05:21:09.553 回答