我的一位客户遇到了我的ActiveX控件问题。 ActiveX应该下载一个Excel文件,将其保存在我的文档中的文件夹中,然后运行Excel并打开该文件。
以下是下载和打开文件的代码段:
private string Checkout(string strFileUrl, string strPhysicalDir, string strPhysicalName)
{
string strMyDocumentFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
string strCiroDocFolder = String.Format(@"{0}\CiroDoc", strMyDocumentFolder);
string strCheckoutFolder = String.Format(@"{0}\{1}", strCiroDocFolder, strPhysicalDir);
string strFilePath = String.Format(@"{0}\{1}", strCheckoutFolder, strPhysicalName);
try
{
if (!Directory.Exists(strCiroDocFolder))
Directory.CreateDirectory(strCiroDocFolder);
if (!Directory.Exists(strCheckoutFolder))
Directory.CreateDirectory(strCheckoutFolder);
if (File.Exists(strFilePath))
File.Delete(strFilePath);
WebClient myWebClient = new WebClient();
myWebClient.DownloadFile(strFileUrl, strFilePath);
}
catch (Exception e)
{
return e.Message;
}
return Run(strFilePath);
}
private string Run(string strFilePath)
{
if (!File.Exists(strFilePath))
return "filenotfound";
if (IsExecutable(strFilePath))
return "isexecutable";
try
{
System.Diagnostics.Process.Start(strFilePath);
}
catch (Exception e)
{
//This get returned
return String.Format("{0} ({1})", e.Message, strFilePath);
}
return "success";
}
Run方法返回异常“命令发送到程序时发生错误”。
当我检查我的文档文件夹时,该文件不存在。由于它不存在,我希望Run方法停止并返回“filenotfound”。
这让我很困惑。为什么File.Exists
会返回true
?启动Windows文件虚拟化并将文件保存在VirtualStore文件夹中吗?如果是这样,怎么能阻止这种行为呢?或者它可能是我客户机器中的其他东西导致这种行为?
我还没能在自己的机器上重现这个问题。如果你知道我将如何感激。
我客户的电脑设置
如果有一些相关信息我遗失了,我会试着去拿它。
答案 0 :(得分:0)
让Internet Explorer处于保护模式且启用UAC会导致System.Diagnostics.Process.Start(strFilePath);
无法按预期运行。
使用此代码将打开Excel文件,即使在保护模式下也是如此。
Process myProcess = new Process();
myProcess.EnableRaisingEvents = false;
myProcess.StartInfo.FileName = "excel";
myProcess.StartInfo.Arguments = String.Format(@"""{0}""", strFilePath);
myProcess.Start();