C# 是否使用Windows7修改.EXE.CONFIG文件中的ConnectionString?
我在Users Application Data文件夹下有一个SQL Server CE 4.0(SDF)文件(因为由于Win7 UAC,如果数据库位于\Programs Files\文件夹中,则无法修改它。但问题仍然是,我现在(安装时)需要修改.EXE.CONFIG文件(ConnectionString)指向数据库的新路径,但显然我无权修改\Program Files\文件夹中的.EXE.CONFIG文件 那么人们如何解决这个问题呢? 您可以将.EXE.CONFIG文件与SDF文件一起部署到用户应用程序数据文件夹吗?如果不能,如何部署?我无法相信您需要授予对\Program Files\Application文件夹的特殊访问权限才能完全访问 我使用的是VS2010,使用的是标准部署项目(MSI),我看不到在一个地方部署.EXE,在另一个地方部署.EXE.CONFIG(可以这样做吗?这是正确的解决方案吗?)C# 是否使用Windows7修改.EXE.CONFIG文件中的ConnectionString?,c#,windows-7,sql-server-ce,C#,Windows 7,Sql Server Ce,我在Users Application Data文件夹下有一个SQL Server CE 4.0(SDF)文件(因为由于Win7 UAC,如果数据库位于\Programs Files\文件夹中,则无法修改它。但问题仍然是,我现在(安装时)需要修改.EXE.CONFIG文件(ConnectionString)指向数据库的新路径,但显然我无权修改\Program Files\文件夹中的.EXE.CONFIG文件 那么人们如何解决这个问题呢? 您可以将.EXE.CONFIG文件与SDF文件一起部署到用
谢谢,使用连接字符串中的
%APPDATA%
变量,您不必修改配置文件。这也比硬编码包含用户名的路径更灵活,因为它将允许计算机的所有用户使用您的程序并拥有自己的.sdf文件
但是,该方法是有效的,因此您需要使用Environment.ExpandEnvironmentVariable
方法强制执行该方法:
// Example appSetting element:
// <add key="examplePath" value="%APPDATA%\example.txt" />
string path = System.Configuration.ConfigurationManager.AppSettings["examplePath"].ToString();
path = Environment.ExpandEnvironmentVariables(path);
System.IO.File.WriteAllText(path, "foobar");
//示例appSetting元素:
//
字符串路径=System.Configuration.ConfigurationManager.AppSettings[“examplePath”].ToString();
路径=环境。ExpandEnvironmentVariables(路径);
System.IO.File.WriteAllText(路径“foobar”);
使用连接字符串中的%APPDATA%
变量,您不必修改配置文件。这也比硬编码包含用户名的路径更灵活,因为它允许计算机的所有用户使用您的程序并拥有自己的.sdf文件
但是,该方法是有效的,因此您需要使用Environment.ExpandEnvironmentVariable
方法强制执行该方法:
// Example appSetting element:
// <add key="examplePath" value="%APPDATA%\example.txt" />
string path = System.Configuration.ConfigurationManager.AppSettings["examplePath"].ToString();
path = Environment.ExpandEnvironmentVariables(path);
System.IO.File.WriteAllText(path, "foobar");
//示例appSetting元素:
//
字符串路径=System.Configuration.ConfigurationManager.AppSettings[“examplePath”].ToString();
路径=环境。ExpandEnvironmentVariables(路径);
System.IO.File.WriteAllText(路径“foobar”);
Odly够了,似乎不起作用,它仍然是这样(无法解析)…我的解决方案是在代码中(在初始化时)读取连接字符串,如果找到%APPDATA%,则用Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)替换它(string replace)@JSchwartz感谢您指出这一点!我发布了我的答案,没有编写代码来验证它,但我刚刚弥补了这一点,学到了一些新的东西并编辑了答案。很遗憾,这似乎不起作用,它仍然是这样(无法解决)…我的解决方案是在代码中(在init上)读入连接字符串,如果找到%APPDATA%,则用Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)@JSchwartz替换它(字符串替换)@JSchwartz谢谢你指出这一点!我发布了我的答案,没有编写代码来验证它,但我刚刚弥补了这一点,学到了一些新东西并编辑了答案。