我确实找到了一些类似的问题,但他们无法指出我正确的方向......这可能是完全愚蠢的事情,但如果有人能告诉我为什么我不能得到一个字符串填充我我很感激。这是我失败的方法:
private static string passwordTrace { get; set; }
// ... lots of other code
private static void RefreshPassword()
{
try
{
string filePath = "\\\\[server ip]\\share\\folder\\file.abcd";
string npDecrypted;
DateTime lastRefreshDate = Properties.Settings.Default.lastRefresh;
if (DateTime.Now >= lastRefreshDate.AddDays(30))
{
using (StreamReader sr = new StreamReader(filePath))
{
string npEncrypted = sr.ReadLine();
if (npEncrypted.Length != 24)
{
string fr = File.ReadAllText(filePath);
npEncrypted = fr.Substring(0, 24);
}
npDecrypted = Decryptor(npEncrypted);
passwordTrace = npDecrypted; // added for debugging only! remove when done.
secureString npSecure = new SecureString();
foreach (char c in npDecrypted)
{
npSecure.AppendChar(c)
}
Properties.Settings.Default.adminpw = npSecure;
Properties.Settings.Default.Save();
}
}
}
catch (FileNotFoundException fnfe)
{
// code for handling this type of exception
}
catch (NullReferenceException nre)
{
// code for handling this type of exception
}
catch (Exception e)
{
// code to catch ANY other type of exception
}
}
现在,VS调试器编译所有内容时没有错误或警告,并且在调试时它可以正常工作。但是,如果我复制已编译的exe(从C:\ project \ bin \ Debug目录)并运行它,则会出现问题。
通过消息框在另一个点调用passwordTrace = ...
所说的点。这通过调试器运行时正常工作,并且没有任何异常抛出任何异常(我确实尝试/捕获了整个地方),但无论出于何种原因PasswordTrace
和Properties.Settings.Default.adminpw
似乎没有在整个应用程序执行期间保持其价值。
此外,正在读取的文件是加密文本文件,始终只有1行字符,该行总是 24个字符长。一个例子是:
09sdjf09ausd08uf9!%38 ==
作为最后的陈述,我还将app.exe.config和app.pdb复制到我复制已编译的.exe文件的服务器目录,看看它是否与它有任何关系并且它没有修复任何东西。我也尝试直接从Debug目录运行.exe(我正在其他地方复制的文件)并且它可以正常工作。一旦我将它从本地磁盘移开它就不起作用。
所以,我怀疑它与环境工作目录有关,或者与应用程序的执行方式有关。我读过一些注意到默认用户没有设置的地方,但我认为这是专门针对ASP.NET的。如果是这种情况,并且用户双击.exe没有正确的网络身份验证,那么我该怎么办?如果它与工作目录有关,我该如何规避这个?
我会继续摆弄,如果我弄清楚,我会更新这个,但我现在迷路了!大声笑!并且最后一次 - 它一直正常工作,直到将其复制到服务器位置。
提前致谢! :)