C# processstartinfo启动进程excel

yqkkidmi  于 2023-06-25  发布在  C#
关注(0)|答案(4)|浏览(241)

我正在尝试用一个文件启动Excel。当我用同一个用户运行它时,它工作得很好。但是对于不同的用户,只有Excel启动,并且也有未知的错误。

private void button1_Click(object sender, EventArgs e)
        {
            SecureString securePwd = new SecureString();

            string password = "P@ssw0rd1";
            SecureString sec_pass = new SecureString();
            Array.ForEach(password.ToArray(), sec_pass.AppendChar);
            sec_pass.MakeReadOnly();

            ProcessStartInfo ps = new ProcessStartInfo();
            ps.FileName = "c:\\Program Files\\Microsoft Office\\Office15\\EXCEL.EXE";
            ps.Arguments = "c:\\test_folder\\test.xlsx";
            ps.WorkingDirectory = "c:\\test_folder";
            ps.Domain = "test.local";
            ps.UserName = "testuser";
            ps.Password = sec_pass;
            ps.UseShellExecute = false;
            Process.Start(ps);
        }

同样的代码通过从ps.FileName =“c:\Program Files\Microsoft Office\Office15\EXCEL.EXE”;到ps.FileName =“notepad.EXE”;
如果有任何权利的问题,即使notepad.exe也不应该工作。

izkcnapc

izkcnapc1#

知道这是一个老帖子,仍然给像我这样有类似问题的人留下回复。查看您的代码,似乎您可能需要将“ps.UseShellExecute”设置为“true”。我在WPF应用程序中使用一个按钮尝试了类似的代码(如下所示),它打开Excel文件没有问题。

private void Button_Click(object sender, RoutedEventArgs e)
    {
        string myPath = @"C:\Users\Lenovo\Documents\MyFile.xlsx";
        ProcessStartInfo ps = new ProcessStartInfo();
        ps.FileName = "excel"; // "EXCEL.EXE" also works
        ps.Arguments = myPath;
        ps.UseShellExecute = true;
        Process.Start(ps);
    }

当然,不要忘记在.cs脚本的顶部添加以下行。

using System.Diagnostics;

好吧,快乐的编码:)

watbbzwu

watbbzwu2#

代码似乎没有任何问题。由于没有改变一点,它只是开始工作正常了。什么都没有。这就引出了一个问题,比如问题是什么。
有什么建议吗?

a7qyws3x

a7qyws3x3#

这是很正常的事情。如果你在公司工作,你和你的朋友一起打开共享Excel文件,其中一个会得到信息“文件被另一个用户打开”,你可以解决这种情况,将此文件复制到例如C:/Temp,然后在共享空间中替换它。

9avjhtql

9avjhtql4#

使用C#代码以非管理员用户启动Excel Process。

public void StartExcelProcessAsDifferentUser(string filePath)
        {
            Process proc = new Process();
            proc.StartInfo = new ProcessStartInfo();
            System.Security.SecureString securePwd = new System.Security.SecureString();

            // Path where Excel application is installed. (Might be different for you)
            proc.StartInfo.FileName = "C:\\Program Files\\Microsoft Office\\root\\Office16\\EXCEL.EXE" 
            proc.StartInfo.Arguments = filePath;
            proc.StartInfo.UseShellExecute = false;

            proc.StartInfo.RedirectStandardInput = true;
            proc.StartInfo.RedirectStandardError = true;
            proc.StartInfo.RedirectStandardOutput = true;
            proc.StartInfo.LoadUserProfile = true;

            proc.StartInfo.UserName = "TestUser1";
            string pwd = "your_password";

            for (int x = 0; x < pwd.Length; x++)
            {
                securePwd.AppendChar(pwd[x]);
            }

            pwd = "";
            proc.StartInfo.Password = securePwd;
            proc.Start();
        }
  1. Refer to this blog在这里了解更多关于设置为true的3个属性。
    1.对于LoadUserProfile=true,加载HKEY_USERS注册表项中的用户配置文件。
    1.对于filePath参数,传入要以其他用户身份打开的Excel文件路径。如果为空,Excel应用程序将打开一个新的空白工作簿。

相关问题