如果我们的独立应用程序只是一个下载的.exe文件(即使用Windows安装程序部署),那么使用正在运行的实例启动第二个实例将非常简单System.Diagnostics.Process.Start.不幸的是,我们的WPF应用程序是通过VIA ClickOnce部署的,因此据我所知,它没有本地文件系统路径.
如何启动正在运行的ClickOnce应用程序的第二个实例?(如果可能的话,传递命令行参数.)
我有一个很老的程序,我无法控制.它启动一个文件类型及其默认应用程序(我无法修改此代码):
LET Err (SHELL_EXECUTE 'open' (FIX_MESG '"{1}"' File_name) '' '')
Run Code Online (Sandbox Code Playgroud)
^^上述代码有效,只要该文件类型与ClickOnce程序无关.
旧程序是32位,操作系统是Windows 7 64位.我可以将我的clickonce程序编译为任何东西,但似乎都没有.(我试过x86,x64和anyCPU)
如何使32位程序使用shell执行在64位操作系统上启动ClickOnce程序?
更多细节:这是一个可重现的错误.建立2个程序.程序1是Clickonce程序.将其与任何文件类型相关联.程序2将执行shell执行命令以打开与clickonce程序关联的任何文件类型.如果将程序2编译为x86,它将为您提供成功响应,但不执行任何操作.
控制台shell执行程序的测试代码:
private static void Main()
{
int value = ShellExecuteA(IntPtr.Zero, "open", @"C:\Users\bsee\Desktop\testfile.ecn2", "", "", 0);
if (value > 32)
MessageBox.Show("Clickonce reports success. But did it actually start?");
}
[DllImport("Shell32.dll")]
public static extern int ShellExecuteA(IntPtr hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirecotry, int nShowCmd);
Run Code Online (Sandbox Code Playgroud)