我对C#的经验很少。我正在学习它,但是发现为此编写代码比我的技能水平高一点。
这里是场景:在我工作的公司中,我们大约有1200台设备由第三方编写,上面有相同的程序。我们必须对其配置文件之一进行一些修改,以使应用程序能够在我们的环境中正常工作。
这里是大部分配置文件:
<?xml version="1.0"?>
<configuration>
<appSettings file="%ProgramData%\NCR\RAL\AlhAdmin.exe.config">
<add key="ConfigurationDataFile" value="AlhAdmin.xml"/> <!--Config Data Xml File -->
<!--Log File Details -->
<!--<add key="ApplicationLogPath" value=""/>-->
<add key="ApplicationLogName" value="AlhAdmin"/>
<!--Number of Days to keep log -->
<add key="ApplicationLogDaysToRetain" value="2"/>
<!--Port Number to be entered here-->
<add key="SocketListenPort" value="11000"/>
<add key="MulticastUDPSendPort" value="11001"/>
<add key="MulticastUDPSendBroadcastAddress" value="224.168.100.25"/>
<add key="MulticastUDPListenPort" value="11002"/>
<add key="MulticastUDPListenBroadcastAddress" value="224.168.100.35"/>
<add key="DefaultSelTime" value="30"/>
<add key="DefaultTermSelTime" value="30"/>
<add key="DefaultLANWaitTime" value="2"/>
<!--DisplayMessage Form-->
<add key="MessageDisplayFile" value="DisplayMessages.xml"/>
<!--RFC: 55071-->
<add key="UltraVNCFolderPathInFS" value="\ExtData\RAL\UltraVNC"/>
<add key="StartUpFolderPath" value="C:\Documents and Settings\All Users\Start Menu\Programs\Startup"/>
<add key="ProgramFileFolderPath" value="C:\Program Files"/>
<add key="NetworkGroupBMP" value="Network.ico"/>
<!--RFC: 52790-->
<add key="DebugLevel" value="25"/>
<add key="BaseIPToIncr" value="192.168.0"/>
<add key="BaseIPToIncrSubNet" value="255.255.255.0"/>
<add key="CheckForConnectedNIC" value="0"/> <!-- Check for only NICs that are connected /-->
<add key="AddAdminGroup" value="0"/>
<add key="SetGatewayInfo" value="1" /> <!-- Wheter order to set the server gateway and DNS entries on the terminal-->
<add key="CopyRemotely" value="1"/> <!-- Whether to copy remotely or use Bootdrv share /-->
<!-- add key="RemoteCopyPort" value="11003" /--> <!-- Remote copy port on which server is copying /-->
<!-- add key="ServerIPEntryRequired" value="1" --/> <!-- Pops the screen to select Server Name/IP /-->
<!-- add key="QWERTY" value="0" /--> <!-- Keyboard style for above screen /-->
<!-- add key="IPScreenTimeout" value="120" /--> <!-- Timeout for Server IP Screen /-->
<!-- add key="Base1stOctet" value="1" /--> <!-- Start number for the 1st Octet /-->
<!-- add key="Default1stOctet" value="1" /--> <!-- Default 1st Octet for IP Screen /-->
<!-- add key="Default2ndOctet" value="0" /--> <!-- Default 2nd Octet for IP Screen /-->
<!-- add key="Default3rdOctet" value="0" /--> <!-- Default 3rd Octet for IP Screen /-->
<!-- add key="Default4thOctet" value="1" /--> <!-- Default 4th Octet for IP Screen /-->
<!-- add key="DefaultServerName" value="" /--> <!-- Default Server Name for IP Screen /-->
<!-- add key="SetEncryptedPassword" value="1" /--> <!-- Sets password encrypted /-->
<add key="SetDefaultDomain" value="0" /> <!-- Sets Default domain in the registry /-->
<!-- add key="BackupData" value="0" /--> <!-- Backs up Data folder over to ExtData\RAL\Data /-->
<!-- add key="DisableAdmin" value="0" /--> <!-- disables administrator account /-->
</appSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/></startup>
<runtime>
<generatePublisherEvidence enabled="false"/>
</runtime>
</configuration>
我们不得不取消注释<!-- add key="ServerIPEntryRequired" value="1" --/>
行。它已经在我们的图像上完成,因此通常不必更改。但是,在测试软件的新版本时,我发现当我安装新版本时,会完全卸载当前版本,然后安装新版本,这意味着修改后的配置文件将重置为默认状态。] >
我正在尝试创建一个Windows服务来监视此应用程序,如果该应用程序的版本发生更改,则要修改配置文件。我找到了一种获取应用程序版本的方法,我认为该方法会起作用:
private string GetSoftwareVersion (string softwareName) { string stringVersion = string.Empty; try { var version = (object)null; // Query the system registry for the version of the given software var searcher = new ManagementObjectSearcher( "SELECT * FROM Win32_Product where Name LIKE " + "'%" + softwareName + "%'"); foreach (ManagementObject obj in searcher.Get()) { version = obj["Version"]; } if (version != null) { stringVersion = (String)version; } // If the given product is not found in the list of installed products in control panel else { stringVersion = "The given application is not found in the list of Installed Programs."; } } // Exception handling catch (Exception e) { stringVersion = "An error occured while getting Version" + " (" + e.Message + ")"; } return stringVersion; }
我更不确定的是修改配置文件,因为它不是真正的XML文件,因为它没有名称空间。之后,它将弄清楚如何实际监视应用程序。
希望这是足够的入门信息。任何帮助,将不胜感激。
谢谢
我对C#的经验很少。我正在学习它,但是发现为此编写代码比我的技能水平高一点。这是场景:在我工作的公司,...
filesystemwatcher的想法是一个好主意,但是如果要监视的文件夹很多,它就会恶化。有人知道定期运行检查吗?作为一项服务安装,您可以安排它每小时运行一次(或以其他方式运行)并查找更改。