在网络中运行process.start()

时间:2012-06-30 05:26:05

标签: c# file process impersonation

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

在其中一个表单中,用户可以从本地计算机浏览并选择文件并将其添加到列表中,因此应用程序将这些文件复制到“我的网络位置”中的文件夹中,用户无法访问该文件夹,但我已创建了一个文件夹已经为我的申请,所以我有他的用户名和密码。每件事情都可以在这里工作。

在此表单中,用户也可以通过选择它并打开按钮打开文件,因此该文件应该在与其扩展名相关的应用程序中打开(例如test.xlsx应该在Exel.exe中打开)。我使用过Process.Start()执行此操作但是对于每个扩展,我收到一个单独的错误(例如 NotePad 的“ Access被拒绝”和“ RunTime错误“for 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方法。

2 个答案:

答案 0 :(得分:0)

您所看到的行为几乎是预料之中的。

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

答案 1 :(得分:0)

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