2017-05-12 51 views
1

我用C#创建了一个VSTO,我想从Program Files(x86)文件夹中调用一个简单的EXE文件。 VSTO代码非常简单,只是尝试使用System.Diagnostics中的Process.Start调用EXE文件。在具有管理员用户的计算机上,代码正常工作。但是,当我在非管理员用户的计算机上尝试它时,VSTO显然没有权限启动EXE。没有错误,但它根本不会做任何事情。C#Outlook由于权限的原因,VSTO无法启动进程

有没有人如何解决这个权限问题?提前致谢!

代码:

private void ThisAddIn_Startup(object sender, System.EventArgs e) { 
    ProcessStartInfo info = new ProcessStartInfo("C:\\Program Files (x86)\\My Program\\here.exe"); 
    info.WorkingDirectory = "C:\\Program Files (x86)\\My Program\\"; 
    info.UseShellExecute = true; 
    Process.Start(info); 
} 
+0

只需右键单击Outlook并以管理员身份运行它。 – Xaqron

+0

我的猜测是你的程序试图做的事情需要对工作目录的写入权限(可能是日志?)。 – mageos

+0

在exe程序中没有什么特别的。没有记录。它可能是一个空的窗体窗口窗口... – Valtinho

回答

0

不设置工作目录Program files (x86)目录。

private void ThisAddIn_Startup(object sender, System.EventArgs e) 
{ 
    ProcessStartInfo info = new ProcessStartInfo(@"C:\Program Files (x86)\My Program\here.exe"); 
    //info.WorkingDirectory = "C:\\Program Files (x86)\\My Program\\"; 
    info.WorkingDirectory = SpecialFolder.ApplicationData 
    info.UseShellExecute = true; 
    Process.Start(info); 
} 
+0

不管我是否设置工作目录,都不会有任何区别。 – Valtinho

+0

如果将工作目录设置为用户的文档文件夹,该怎么办? –

+0

有趣的是,我昨天正在尝试,并在一台特定的计算机上没有文档文件夹。我不知道它是否被意外删除了,但是Windows机器在没有文档文件夹的情况下运行得非常开心,并且导致我的程序崩溃,所以我决定从AppData文件夹运行程序。没有权限问题,但这只是一个临时解决方案。 – Valtinho

0

请记住Program Files文件夹需要管理员权限。如果您(用户)没有足够的权限,则无法修改任何内容。如果目标.exe文件尝试创建或写入某些内容,则无法运行。

如果您在基于x86的OS系统中运行代码,路径将会不同。在这些操作系统上没有Program Files (x86)文件夹。

如果您指定可执行文件的完整路径,则不需要设置WorkingDirectory属性。

+0

我有一段代码检测计算机的体系结构并相应地设置路径。我从我的例子中排除了它,以隔离问题,即exe甚至没有打开。用户必须至少具有对程序文件文件夹的读取权限,否则无法运行程序。如果你想尝试复制这个问题,你可以简单地尝试打开一个空白的窗体。 – Valtinho

+0

您是否通过e Windows Forms应用程序获得相同的结果? –

+0

不知道什么是Windows窗体,对不起我的无知。该exe是一个单独的窗体项目...我现在放弃了这个权限问题,因为缺乏时间。我仍然希望能够从程序文件目录运行软件,因为这是我存储vsto和清单文件的地方。但是,为了让它现在能够工作,直到找到解决方案,我改变了vsto,而不是从用户的appdata文件夹中打开exe文件。 – Valtinho

相关问题