根据我对this和this的理解,我的应用程序运行的位置可以使用@“ \ Program Files \ HHS \ HHS.exe “:
...我想访问的文件可以通过@“\ Application \ sscs \ HHSetup.exe”访问:
...但是这段代码:
string clientVer = HHSUtils.GetFileVersion(@"\Application\sscs\HHSetup.exe");
. . .
public static string GetFileVersion(string filePath)
{
try
{
const int VERSION_DEPTH = 4;
var version = NativeFile.GetFileInfo(filePath);
return version.Version.ToString(VERSION_DEPTH);
}
catch (Exception ex)
{
return ex.Message;
}
}
...失败。 GetFileVersion()返回“ Win32Exception ”,而不是像“3.1.4.7”这样的版本号(或像“0.0.0.0”那样“无法找到它”的值)。 / p>
即使我通过强迫这样一个“哦,好”的价值来解决这个问题:
if (clientVer.Contains("Exception"))
{
clientVer = "0.0.0.0";
}
...后续调用因“无法连接到远程服务器”而失败
// both serial num and clientVer have valid values now, such as "8675309" for serialNum and "0.0.0.0" for clientVer
string uri = string.Format("http://localhost:28642/api/FileTransfer/GetUpdatedHHSetup?serialNum={0}&clientVersion={1}", serNum, clientVer);
RESTfulMethods.DownloadNewerVersionOfHHSetup(uri);
......但这是另一个故事;我的问题是:为什么GetFileVersion()返回“Win32Exception”?我发送的路径(@“\ Application \ sscs \ HHSetup.exe”)是错误的,还是GetFileVersion()本身的东西?
由于代码几乎保证良好,我认为问题必须在我传递的路径中 - 它的格式等。也许它 是一个权限错误,正如Michael Kniffen在下面提到的那样;但如果是这样,我不知道如何解决它。或者这可能是路径格式问题?我不知道;我比19世纪的俄勒冈家园更难过......
这似乎是一个路径问题;捷克这个:
//string clientVer = HHSUtils.GetFileVersion(@"\Application\sscs\HHSetup.exe");
// to see if the path is the problem, try something more straightforward:
string clientVer = HHSUtils.GetFileVersion(@"\Program Files\HHS\vsd_setup.dll");
注释掉的代码导致了问题。
新代码运行正常;我得到一个有效的文件版本(“1.0.2268.0”)。
所以它几乎必须是路径(“\ Application”不正确访问“内部闪存驱动器”(或任何正确的术语))或者文件本身 - 它没有文件版本信息,因此可能是问题的原因。
我将通过复制sscs文件夹下的vsd_setup.dll并尝试此操作来测试:
这是文件 - 测试工作正常。因此,如果文件没有版本信息,则返回Win32Exception 13。
如果要搜索的文件有版本信息,我会得到它(例如“1.0.2268.0”);但如果不这样的话,请注意以下事项 - 所有达拉斯都会松开!
string clientVer = HHSUtils.GetFileVersion(@"\Application\sscs\vsd_setup.dll");
答案 0 :(得分:1)
为什么不从一个简单的应用开始,你只是在运行基础知识的设备上运行?这将告诉您它是否是路径问题。没有实时调试器并不意味着你应该放弃“start simple”的调试基础。
public static void Main()
{
var path = "\\my\\file\\path.foo";
Console.WriteLine("Checking for file...");
var fi = new FileInfo(path);
if(!fi.Exists)
{
Console.WriteLine("File doesn't exist");
return;
}
try
{
Console.WriteLine("Getting version...");
const int VERSION_DEPTH = 4;
var version = NativeFile.GetFileInfo(path);
Console.WriteLine(version.Version.ToString());
}
catch (Exception ex)
{
Console.WriteLine("Error: " + return ex.Message);
}
}